Open In Colab

LICENSING NOTICE¶

Note that all users who use Vital DB, an open biosignal dataset, must agree to the Data Use Agreement below. If you do not agree, please close this window. The Data Use Agreement is available here: https://vitaldb.net/dataset/#h.vcpgs1yemdb5

This is the development version of the project code¶

For the Project Draft submission see the DL4H_Team_24_Project_Draft.ipynb notebook in the project repository.

Project repository¶

The project repository can be found at: https://github.com/abarrie2/cs598-dlh-project

Introduction¶

This project aims to reproduce findings from the paper titled "Predicting intraoperative hypotension using deep learning with waveforms of arterial blood pressure, electroencephalogram, and electrocardiogram: Retrospective study" by Jo Y-Y et al. (2022) [1]. This study introduces a deep learning model that predicts intraoperative hypotension (IOH) events before they occur, utilizing a combination of arterial blood pressure (ABP), electroencephalogram (EEG), and electrocardiogram (ECG) signals.

Background of the Problem¶

Intraoperative hypotension (IOH) is a common and significant surgical complication defined by a mean arterial pressure drop below 65 mmHg. It is associated with increased risks of myocardial infarction, acute kidney injury, and heightened postoperative mortality. Effective prediction and timely intervention can substantially enhance patient outcomes.

Evolution of IOH Prediction¶

Initial attempts to predict IOH primarily used arterial blood pressure (ABP) waveforms. A foundational study by Hatib F et al. (2018) titled "Machine-learning Algorithm to Predict Hypotension Based on High-fidelity Arterial Pressure Waveform Analysis" [2] showed that machine learning could forecast IOH events using ABP with reasonable accuracy. This finding spurred further research into utilizing various physiological signals for IOH prediction.

Subsequent advancements included the development of the Acumen™ hypotension prediction index, which was studied in "AcumenTM hypotension prediction index guidance for prevention and treatment of hypotension in noncardiac surgery: a prospective, single-arm, multicenter trial" by Bao X et al. (2024) [3]. This trial integrated a hypotension prediction index into blood pressure monitoring equipment, demonstrating its effectiveness in reducing the number and duration of IOH events during surgeries. Further study is needed to determine whether this resultant reduction in IOH events transalates into improved postoperative patient outcomes.

Current Study¶

Building on these advancements, the paper by Jo Y-Y et al. (2022) proposes a deep learning approach that enhances prediction accuracy by incorporating EEG and ECG signals along with ABP. This multi-modal method, evaluated over prediction windows of 3, 5, 10, and 15 minutes, aims to provide a comprehensive physiological profile that could predict IOH more accurately and earlier. Their results indicate that the combination of ABP and EEG significantly improves performance metrics such as AUROC and AUPRC, outperforming models that use fewer signals or different combinations.

Our project seeks to reproduce and verify Jo Y-Y et al.'s results to assess whether this integrated approach can indeed improve IOH prediction accuracy, thereby potentially enhancing surgical safety and patient outcomes.

Scope of Reproducibility:¶

The original paper investigated the following hypotheses:

  1. Hypothesis 1: A model using ABP and ECG will outperform a model using ABP alone in predicting IOH.
  2. Hypothesis 2: A model using ABP and EEG will outperform a model using ABP alone in predicting IOH.
  3. Hypothesis 3: A model using ABP, EEG, and ECG will outperform a model using ABP alone in predicting IOH.

Results were compared using AUROC and AUPRC scores. Based on the results described in the original paper, we expect that Hypothesis 2 will be confirmed, and that Hypotheses 1 and 3 will not be confirmed.

In order to perform the corresponding experiments, we will implement a CNN-based model that can be configured to train and infer using the following four model variations:

  1. ABP data alone
  2. ABP and ECG data
  3. ABP and EEG data
  4. ABP, ECG, and EEG data

We will measure the performance of these configurations using the same AUROC and AUPRC metrics as used in the original paper. To test hypothesis 1 we will compare the AUROC and AUPRC measures between model variation 1 and model variation 2. To test hypothesis 2 we will compare the AUROC and AUPRC measures between model variation 1 and model variation 3. To test hypothesis 3 we will compare the AUROC and AUPRC measures between model variation 1 and model variation 4. For all of the above measures and experiment combinations, we will operate multiple experiments where the time-to-IOH event prediction will use the following prediction windows:

  1. 3 minutes before event
  2. 5 minutes before event
  3. 10 minutes before event
  4. 15 minutes before event

In the event that we are compute-bound, we will prioritize the 3-minute prediction window experiments as they are the most relevant to the original paper's findings.

The predictive power of ABP, ECG and ABP + ECG models at 3-, 5-, 10- and 15-minute prediction windows: Predictive power of ABP, ECG and ABP + ECG models at 3-, 5-, 10- and 15-minute prediction windows

Modifications made for demo mode¶

In order to demonstrate the functioning of the code in a short (ie, <8 minute limit) the following options and modifications were used:

  1. MAX_CASES was set to 20. The total number of cases to be used in the full training set is 3296, but the smaller numbers allows demonstration of each section of the pipeline.
  2. vitaldb_cache is prepopulated in Google Colab. The cache file is approx. 800MB and contains the raw and mini-fied copies of the source dataset and is downloaded from Google Drive. This is much faster than using the vitaldb API, but is again only a fraction of the data. The full dataset can be downloaded with the API or prepopulated by following the instructions in the "Bulk Data Download" section below.
  3. max_epochs is set to 6. With the small dataset, training is fast and shows the decreasing training and validation losses. In the full model run, max_epochs will be set to 100. In both cases early stopping is enabled and will stop training if the validation losses stop decreasing for five consecutive epochs.
  4. Only the "ABP + EEG" combination will be run. In the final report, additional combinations will be run, as discussed later.
  5. Only the 3-minute prediction window will be run. In the final report, additional prediction windows (5, 10 and 15 minutes) will be run, as discussed later.
  6. No ablations are run in the demo. These will be completed for the final report.

Methodology¶

Methodology from Final Rubrik¶

  • Environment
    • Python version
    • Dependencies/packages needed
  • Data
    • Data download instruction
    • Data descriptions with helpful charts and visualizations
    • Preprocessing code + command
  • Model
    • Citation to the original paper
    • Link to the original paper’s repo (if applicable)
    • Model descriptions
    • Implementation code
    • Pretrained model (if applicable)
  • Training
    • Hyperparams
      • Report at least 3 types of hyperparameters such as learning rate, batch size, hidden size, dropout
    • Computational requirements
      • Report at least 3 types of requirements such as type of hardware, average runtime for each epoch, total number of trials, GPU hrs used, # training epochs
      • Training code
  • Evaluation
    • Metrics descriptions
    • Evaluation code

The methodology section is composed of the following subsections: Environment, Data and Model.

  • Environment: This section describes the setup of the environment, including the installation of necessary libraries and the configuration of the runtime environment.
  • Data: This section describes the dataset used in the study, including its collection and preprocessing.
    • Data Collection: This section describes the process of downloading the dataset from VitalDB and populating the local data cache.
    • Data Preprocessing: This section describes the preprocessing steps applied to the dataset, including data selection, data cleaning, and feature extraction.
  • Model: This section describes the deep learning model used in the study, including its implementation, training, and evaluation.
    • Model Implementation: This section describes the implementation of the deep learning model, including the architecture, loss function, and optimization algorithm.
    • Model Training: This section describes the training process, including the training loop, hyperparameters, and training strategy.
    • Model Evaluation: This section describes the evaluation process, including the metrics used, the evaluation strategy, and the results obtained.

Environment¶

Create environment¶

The environment setup differs based on whether you are running the code on a local machine or on Google Colab. The following sections provide instructions for setting up the environment in each case.

Local machine¶

Create conda environment for the project using the environment.yml file:

conda env create --prefix .envs/dlh-team24 -f environment.yml

Activate the environment with:

conda activate .envs/dlh-team24

Google Colab¶

The following code snippet installs the required packages and downloads the necessary files in a Google Colab environment:

In [1]:
# Google Colab environments have a `/content` directory. Use this as a proxy for running Colab-only code
COLAB_ENV = "google.colab" in str(get_ipython())
if COLAB_ENV:
    #install vitaldb
    %pip install vitaldb

    # Executing in Colab therefore download cached preprocessed data.
    # TODO: Integrate this with the setup local cache data section below.
    # Check for file existence before overwriting.
    import gdown
    gdown.download(id="15b5Nfhgj3McSO2GmkVUKkhSSxQXX14hJ", output="vitaldb_cache.tgz")
    !tar -zxf vitaldb_cache.tgz

    # Download sqi_filter.csv from github repo
    !wget https://raw.githubusercontent.com/abarrie2/cs598-dlh-project/main/sqi_filter.csv

All other required packages are already installed in the Google Colab environment.

Load environment¶

In [2]:
# Import packages
import os
import random
import sys
import uuid
import copy
from collections import defaultdict

from timeit import default_timer as timer

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score, precision_recall_curve, auc, confusion_matrix
from sklearn.metrics import RocCurveDisplay, PrecisionRecallDisplay, average_precision_score
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import torch
from torch.utils.data import Dataset
import vitaldb
import h5py

import torch.nn as nn
import torch.nn.functional as F
from tqdm import tqdm
from datetime import datetime

Set random seeds to generate consistent results:

In [3]:
RANDOM_SEED = 42

def reset_random_state():
    random.seed(RANDOM_SEED)
    np.random.seed(RANDOM_SEED)
    torch.manual_seed(RANDOM_SEED)
    if torch.cuda.is_available():
        torch.cuda.manual_seed(RANDOM_SEED)
        torch.cuda.manual_seed_all(RANDOM_SEED)
        torch.backends.cudnn.deterministic = True
        torch.backends.cudnn.benchmark = False
    os.environ["PYTHONHASHSEED"] = str(RANDOM_SEED)
    
reset_random_state()

Set device to GPU or MPS if available

In [4]:
device = torch.device("cuda" if torch.cuda.is_available() else "mps" if (torch.backends.mps.is_available() and torch.backends.mps.is_built()) else "cpu")
print(f"Using device: {device}")
Using device: mps

Define class to print to console and simultaneously save to file:

In [5]:
class ForkedStdout:
    def __init__(self, file_path):
        self.file = open(file_path, 'w')
        self.stdout = sys.stdout

    def write(self, message):
        self.stdout.write(message)
        self.file.write(message)

    def flush(self):
        self.stdout.flush()
        self.file.flush()

    def __enter__(self):
        sys.stdout = self

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout = self.stdout
        self.file.close()

Data¶

Data Description¶

Source¶

Data for this project is sourced from the open biosignal VitalDB dataset as described in "VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients" by Lee H-C et al. (2022) [4], which contains perioperative vital signs and numerical data from 6,388 cases of non-cardiac (general, thoracic, urological, and gynecological) surgery patients who underwent routine or emergency surgery at Seoul National University Hospital between 2016 and 2017. The dataset includes ABP, ECG, and EEG signals, as well as other physiological data. The dataset is available through an API and Python library, and at PhysioNet: https://physionet.org/content/vitaldb/1.0.0/

Statistics¶

Characteristics of the dataset: | Characteristic | Value | Details | |-----------------------|-----------------------------|------------------------| | Total number of cases | 6,388 | | | Sex (male) | 3,243 (50.8%) | | | Age (years) | 59 | Range: 48-68 | | Height (cm) | 162 | Range: 156-169 | | Weight (kg) | 61 | Range: 53-69 | | Tram-Rac 4A tracks | 6,355 (99.5%) | Sampling rate: 500Hz | | BIS Vista tracks | 5,566 (87.1%) | Sampling rate: 128Hz | | Case duration (min) | 189 | Range: 27-1041 |

Labels are only known after processing the data. In the original paper, there were an average of 1.6 IOH events per case and 5.7 non-events per case so we expect approximately 10,221 IOH events and 364,116 non-events in the dataset.

Data Processing¶

Data will be processed as follows:

  1. Load the dataset from VitalDB, or from a local cache if previously downloaded.
  2. Apply the inclusion and exclusion selection criteria to filter the dataset according to surgery metadata.
  3. Generate a minified dataset by discarding all tracks except ABP, ECG, and EEG.
  4. Preprocess the data by applying band-pass and z-score normalization to the ECG and EEG signals, and filtering out ABP signals below a Signal Quality Index (SQI) threshold.
  5. Generate event and non-event samples by extracting 60-second segments around IOH events and non-events.
  6. Split the dataset into training, validation, and test sets with a 6:1:3 ratio, ensuring that samples from a single case are not split across different sets to avoid data leakage.

Set Up Local Data Caches¶

VitalDB data is static, so local copies can be stored and reused to avoid expensive downloads and to speed up data processing.

The default directory defined below is in the project .gitignore file. If this is modified, the new directory should also be added to the project .gitignore.

In [6]:
VITALDB_CACHE = './vitaldb_cache'
VITAL_ALL = f"{VITALDB_CACHE}/vital_all"
VITAL_MINI = f"{VITALDB_CACHE}/vital_mini"
VITAL_METADATA = f"{VITALDB_CACHE}/metadata"
VITAL_MODELS = f"{VITALDB_CACHE}/models"
VITAL_RUNS = f"{VITALDB_CACHE}/runs"
VITAL_PREPROCESS_SCRATCH = f"{VITALDB_CACHE}/data_scratch"
VITAL_EXTRACTED_SEGMENTS = f"{VITALDB_CACHE}/segments"
In [7]:
TRACK_CACHE = None
SEGMENT_CACHE = None

# when USE_MEMORY_CACHING is enabled, track data will be persisted in an in-memory cache. Not useful once we have already pre-extracted all event segments
# DON'T USE: Stores items in memory that are later not used. Causes OOM on segment extraction.
USE_MEMORY_CACHING = False

# When RESET_CACHE is set to True, it will ensure the TRACK_CACHE is disposed and recreated when we do dataset initialization.
# Use as a shortcut to wiping cache rather than restarting kernel
RESET_CACHE = False

PREDICTION_WINDOW = 15
#PREDICTION_WINDOW = 'ALL'

ALL_PREDICTION_WINDOWS = [3, 5, 10, 15]

# Maximum number of cases of interest for which to download data.
# Set to a small value (ex: 20) for demo purposes, else set to None to disable and download and process all.
MAX_CASES = None
#MAX_CASES = 300

# Preloading Cases: when true, all matched cases will have the _mini tracks extracted and put into in-mem dict
PRELOADING_CASES = False
PRELOADING_SEGMENTS = True
# Perform Data Preprocessing: do we want to take the raw vital file and extract segments of interest for training?
PERFORM_DATA_PREPROCESSING = False
In [8]:
if not os.path.exists(VITALDB_CACHE):
  os.mkdir(VITALDB_CACHE)
if not os.path.exists(VITAL_ALL):
  os.mkdir(VITAL_ALL)
if not os.path.exists(VITAL_MINI):
  os.mkdir(VITAL_MINI)
if not os.path.exists(VITAL_METADATA):
  os.mkdir(VITAL_METADATA)
if not os.path.exists(VITAL_MODELS):
  os.mkdir(VITAL_MODELS)
if not os.path.exists(VITAL_RUNS):
  os.mkdir(VITAL_RUNS)
if not os.path.exists(VITAL_PREPROCESS_SCRATCH):
  os.mkdir(VITAL_PREPROCESS_SCRATCH)
if not os.path.exists(VITAL_EXTRACTED_SEGMENTS):
  os.mkdir(VITAL_EXTRACTED_SEGMENTS)

print(os.listdir(VITALDB_CACHE))
['segments_filter_neg', 'segments_bak', 'runs_old', '.DS_Store', 'segments_filter_neg_pos', 'vital_mini_bak_0501', 'vital_all', 'segments_sizes_sp.txt', 'models_all_cases_baseline', 'models', 'docs', 'vital_mini.tar', 'data_scratch', 'segments_md5_sp.txt', 'vital_file_md5_mw.txt', 'segments_bak_0501', 'osfs', 'runs_03_15', 'vital_mini', 'segments_filter_none', 'vital_file_mini_md5_sp.txt', 'vital_file_mini_file_sizes_sp.txt', 'runs', 'metadata', 'segments', 'models_old', 'vital_file_md5_sp.txt']

Bulk Data Download¶

This step is not required, but will significantly speed up downstream processing and avoid a high volume of API requests to the VitalDB web site.

The cache population code checks if the .vital files are locally available, and can be populated by calling the vitaldb API or by manually prepopulating the cache (recommended)

  • Manually downloaded the dataset from the following site: https://physionet.org/content/vitaldb/1.0.0/
    • Download the zip file in a browser, or
    • Use wget -r -N -c -np https://physionet.org/files/vitaldb/1.0.0/ to download the files in a terminal
  • Move the contents of vital_files into the ${VITAL_ALL} directory.
In [9]:
# Returns the Pandas DataFrame for the specified dataset.
#   One of 'cases', 'labs', or 'trks'
# If the file exists locally, create and return the DataFrame.
# Else, download and cache the csv first, then return the DataFrame.
def vitaldb_dataframe_loader(dataset_name):
    if dataset_name not in ['cases', 'labs', 'trks']:
        raise ValueError(f'Invalid dataset name: {dataset_name}')
    file_path = f'{VITAL_METADATA}/{dataset_name}.csv'
    if os.path.isfile(file_path):
        print(f'{dataset_name}.csv exists locally.')
        df = pd.read_csv(file_path)
        return df
    else:
        print(f'downloading {dataset_name} and storing in the local cache for future reuse.')
        df = pd.read_csv(f'https://api.vitaldb.net/{dataset_name}')
        df.to_csv(file_path, index=False)
        return df

Exploratory Data Analysis¶

Cases¶

In [10]:
cases = vitaldb_dataframe_loader('cases')
cases = cases.set_index('caseid')
cases.shape
cases.csv exists locally.
Out[10]:
(6388, 73)
In [11]:
cases.index.nunique()
Out[11]:
6388
In [12]:
cases.head()
Out[12]:
subjectid casestart caseend anestart aneend opstart opend adm dis icu_days ... intraop_colloid intraop_ppf intraop_mdz intraop_ftn intraop_rocu intraop_vecu intraop_eph intraop_phe intraop_epi intraop_ca
caseid
1 5955 0 11542 -552 10848.0 1668 10368 -236220 627780 0 ... 0 120 0.0 100 70 0 10 0 0 0
2 2487 0 15741 -1039 14921.0 1721 14621 -221160 1506840 0 ... 0 150 0.0 0 100 0 20 0 0 0
3 2861 0 4394 -590 4210.0 1090 3010 -218640 40560 0 ... 0 0 0.0 0 50 0 0 0 0 0
4 1903 0 20990 -778 20222.0 2522 17822 -201120 576480 1 ... 0 80 0.0 100 100 0 50 0 0 0
5 4416 0 21531 -1009 22391.0 2591 20291 -67560 3734040 13 ... 0 0 0.0 0 160 0 10 900 0 2100

5 rows × 73 columns

In [13]:
cases['sex'].value_counts()
Out[13]:
sex
M    3243
F    3145
Name: count, dtype: int64

Tracks¶

In [14]:
trks = vitaldb_dataframe_loader('trks')
trks = trks.set_index('caseid')
trks.shape
trks.csv exists locally.
Out[14]:
(486449, 2)
In [15]:
trks.index.nunique()
Out[15]:
6388
In [16]:
trks.groupby('caseid')[['tid']].count().plot();
In [17]:
trks.groupby('caseid')[['tid']].count().hist();
In [18]:
trks.groupby('tname').count().sort_values(by='tid', ascending=False)
Out[18]:
tid
tname
Solar8000/HR 6387
Solar8000/PLETH_SPO2 6386
Solar8000/PLETH_HR 6386
Primus/CO2 6362
Primus/PAMB_MBAR 6361
... ...
Orchestra/AMD_VOL 1
Solar8000/ST_V5 1
Orchestra/NPS_VOL 1
Orchestra/AMD_RATE 1
Orchestra/VEC_VOL 1

196 rows × 1 columns

Parameters of Interest¶

Hemodynamic Parameters Reference¶

https://vitaldb.net/dataset/?query=overview#h.f7d712ycdpk2

SNUADC/ART

arterial blood pressure waveform

Parameter, Description, Type/Hz, Unit

SNUADC/ART, Arterial pressure wave, W/500, mmHg

In [19]:
trks[trks['tname'].str.contains('SNUADC/ART')].shape
Out[19]:
(3645, 2)

SNUADC/ECG_II

electrocardiogram waveform

Parameter, Description, Type/Hz, Unit

SNUADC/ECG_II, ECG lead II wave, W/500, mV

In [20]:
trks[trks['tname'].str.contains('SNUADC/ECG_II')].shape
Out[20]:
(6355, 2)

BIS/EEG1_WAV

electroencephalogram waveform

Parameter, Description, Type/Hz, Unit

BIS/EEG1_WAV, EEG wave from channel 1, W/128, uV

In [21]:
trks[trks['tname'].str.contains('BIS/EEG1_WAV')].shape
Out[21]:
(5871, 2)

Cases of Interest¶

These are the subset of case ids for which modelling and analysis will be performed based upon inclusion criteria and waveform data availability.

In [22]:
# TRACK NAMES is used for metadata analysis via API
TRACK_NAMES = ['SNUADC/ART', 'SNUADC/ECG_II', 'BIS/EEG1_WAV']
TRACK_SRATES = [500, 500, 128]
# EXTRACTION TRACK NAMES adds the EVENT track which is only used when doing actual file i/o
EXTRACTION_TRACK_NAMES = ['SNUADC/ART', 'SNUADC/ECG_II', 'BIS/EEG1_WAV', 'EVENT']
EXTRACTION_TRACK_SRATES = [500, 500, 128, 1]
In [23]:
# As in the paper, select cases which meet the following criteria:
#
# For patients, the inclusion criteria were as follows:
# (1) adults (age >= 18)
# (2) administered general anaesthesia
# (3) undergone non-cardiac surgery. 
#
# For waveform data, the inclusion criteria were as follows:
# (1) no missing monitoring for ABP, ECG, and EEG waveforms
# (2) no cases containing false events or non-events due to poor signal quality
#     (checked in second stage of data preprocessing)

# Adult
inclusion_1 = cases.loc[cases['age'] >= 18].index
print(f'{len(cases)-len(inclusion_1)} cases excluded, {len(inclusion_1)} remaining due to age criteria')

# General Anesthesia
inclusion_2 = cases.loc[cases['ane_type'] == 'General'].index
print(f'{len(cases)-len(inclusion_2)} cases excluded, {len(inclusion_2)} remaining due to anesthesia criteria')

# Non-cardiac surgery
inclusion_3 = cases.loc[
    ~cases['opname'].str.contains("cardiac", case=False)
    & ~cases['opname'].str.contains("aneurysmal", case=False)
].index
print(f'{len(cases)-len(inclusion_3)} cases excluded, {len(inclusion_3)} remaining due to non-cardiac surgery criteria')

# ABP, ECG, EEG waveforms
inclusion_4 = trks.loc[trks['tname'].isin(TRACK_NAMES)].index.value_counts()
inclusion_4 = inclusion_4[inclusion_4 == len(TRACK_NAMES)].index
print(f'{len(cases)-len(inclusion_4)} cases excluded, {len(inclusion_4)} remaining due to missing waveform data')

# SQI filter
# NOTE: this depends on a sqi_filter.csv generated by external processing
inclusion_5 = pd.read_csv('sqi_filter.csv', header=None, names=['caseid','sqi']).set_index('caseid').index
print(f'{len(cases)-len(inclusion_5)} cases excluded, {len(inclusion_5)} remaining due to SQI threshold not being met')

# Only include cases with known good waveforms.
exclusion_6 = pd.read_csv('malformed_tracks_filter.csv', header=None, names=['caseid']).set_index('caseid').index
inclusion_6 = cases.index.difference(exclusion_6)
print(f'{len(cases)-len(inclusion_6)} cases excluded, {len(inclusion_6)} remaining due to malformed waveforms')

cases_of_interest_idx = inclusion_1 \
    .intersection(inclusion_2) \
    .intersection(inclusion_3) \
    .intersection(inclusion_4) \
    .intersection(inclusion_5) \
    .intersection(inclusion_6)

cases_of_interest = cases.loc[cases_of_interest_idx]

print()
print(f'{cases_of_interest_idx.shape[0]} out of {cases.shape[0]} total cases remaining after exclusions applied')

# Trim cases of interest to MAX_CASES
if MAX_CASES:
    cases_of_interest_idx = cases_of_interest_idx[:MAX_CASES]
print(f'{cases_of_interest_idx.shape[0]} cases of interest selected')
57 cases excluded, 6331 remaining due to age criteria
345 cases excluded, 6043 remaining due to anesthesia criteria
14 cases excluded, 6374 remaining due to non-cardiac surgery criteria
3019 cases excluded, 3369 remaining due to missing waveform data
0 cases excluded, 6388 remaining due to SQI threshold not being met
533 cases excluded, 5855 remaining due to malformed waveforms

2763 out of 6388 total cases remaining after exclusions applied
2763 cases of interest selected
In [24]:
cases_of_interest.head(n=5)
Out[24]:
subjectid casestart caseend anestart aneend opstart opend adm dis icu_days ... intraop_colloid intraop_ppf intraop_mdz intraop_ftn intraop_rocu intraop_vecu intraop_eph intraop_phe intraop_epi intraop_ca
caseid
1 5955 0 11542 -552 10848.0 1668 10368 -236220 627780 0 ... 0 120 0.0 100 70 0 10 0 0 0
4 1903 0 20990 -778 20222.0 2522 17822 -201120 576480 1 ... 0 80 0.0 100 100 0 50 0 0 0
7 5124 0 15770 477 14817.0 3177 14577 -154320 623280 3 ... 0 0 0.0 0 120 0 0 0 0 0
10 2175 0 20992 -1743 21057.0 2457 19857 -220740 3580860 1 ... 0 90 0.0 0 110 0 20 500 0 600
12 491 0 31203 -220 31460.0 5360 30860 -208500 1519500 4 ... 200 100 0.0 100 70 0 20 0 0 3300

5 rows × 73 columns

Tracks of Interest¶

These are the subset of tracks (waveforms) for the cases of interest identified above.

In [25]:
# A single case maps to one or more waveform tracks. Select only the tracks required for analysis.
trks_of_interest = trks.loc[cases_of_interest_idx][trks.loc[cases_of_interest_idx]['tname'].isin(TRACK_NAMES)]
trks_of_interest.shape
Out[25]:
(8289, 2)
In [26]:
trks_of_interest.head(n=5)
Out[26]:
tname tid
caseid
1 BIS/EEG1_WAV 0aa685df768489a18a5e9f53af0d83bf60890c73
1 SNUADC/ART 724cdd7184d7886b8f7de091c5b135bd01949959
1 SNUADC/ECG_II 8c9161aaae8cb578e2aa7b60f44234d98d2b3344
4 BIS/EEG1_WAV 1b4c2379be3397a79d3787dd810190150dc53f27
4 SNUADC/ART e28777c4706fe3a5e714bf2d91821d22d782d802
In [27]:
trks_of_interest_idx = trks_of_interest.set_index('tid').index
trks_of_interest_idx.shape
Out[27]:
(8289,)

Build Tracks Cache for Local Processing¶

Tracks data are large and therefore expensive to download every time used. By default, the .vital file format stores all tracks for each case internally. Since only select tracks per case are required, each .vital file can be further reduced by discarding the unused tracks.

In [28]:
# Ensure the full vital file dataset is available for cases of interest.
count_downloaded = 0
count_present = 0

#for i, idx in enumerate(cases.index):
for idx in cases_of_interest_idx:
    full_path = f'{VITAL_ALL}/{idx:04d}.vital'
    if not os.path.isfile(full_path):
        print(f'Missing vital file: {full_path}')
        # Download and save the file.
        vf = vitaldb.VitalFile(idx)
        vf.to_vital(full_path)
        count_downloaded += 1
    else:
        count_present += 1

print()
print(f'Count of cases of interest:           {cases_of_interest_idx.shape[0]}')
print(f'Count of vital files downloaded:      {count_downloaded}')
print(f'Count of vital files already present: {count_present}')
Count of cases of interest:           2763
Count of vital files downloaded:      0
Count of vital files already present: 2763

Validate Mini Files¶

In [29]:
# Convert vital files to "mini" versions including only the subset of tracks defined in TRACK_NAMES above.
# Only perform conversion for the cases of interest.
# NOTE: If this cell is interrupted, it can be restarted and will continue where it left off.
count_minified = 0
count_present = 0
count_missing_tracks = 0
count_not_fixable = 0

# If set to true, local mini files are checked for all tracks even if the mini file is already present.
FORCE_VALIDATE = False

for idx in cases_of_interest_idx:
    full_path = f'{VITAL_ALL}/{idx:04d}.vital'
    mini_path = f'{VITAL_MINI}/{idx:04d}_mini.vital'

    if FORCE_VALIDATE or not os.path.isfile(mini_path):
        print(f'Creating mini vital file: {idx}')
        vf = vitaldb.VitalFile(full_path, EXTRACTION_TRACK_NAMES)
        
        if len(vf.get_track_names()) != 4:
            print(f'Missing track in vital file: {idx}, {set(EXTRACTION_TRACK_NAMES).difference(set(vf.get_track_names()))}')
            count_missing_tracks += 1
            
            # Attempt to download from VitalDB directly and see if missing tracks are present.
            vf = vitaldb.VitalFile(idx, EXTRACTION_TRACK_NAMES)
            
            if len(vf.get_track_names()) != 4:
                print(f'Unable to fix missing tracks: {idx}')
                count_not_fixable += 1
                continue
                
            if vf.get_track_samples(EXTRACTION_TRACK_NAMES[0], 1/EXTRACTION_TRACK_SRATES[0]).shape[0] == 0:
                print(f'Empty track: {idx}, {EXTRACTION_TRACK_NAMES[0]}')
                count_not_fixable += 1
                continue
                
            if vf.get_track_samples(EXTRACTION_TRACK_NAMES[1], 1/EXTRACTION_TRACK_SRATES[1]).shape[0] == 0:
                print(f'Empty track: {idx}, {EXTRACTION_TRACK_NAMES[1]}')
                count_not_fixable += 1
                continue
                
            if vf.get_track_samples(EXTRACTION_TRACK_NAMES[2], 1/EXTRACTION_TRACK_SRATES[2]).shape[0] == 0:
                print(f'Empty track: {idx}, {EXTRACTION_TRACK_NAMES[2]}')
                count_not_fixable += 1
                continue

            if vf.get_track_samples(EXTRACTION_TRACK_NAMES[3], 1/EXTRACTION_TRACK_SRATES[3]).shape[0] == 0:
                print(f'Empty track: {idx}, {EXTRACTION_TRACK_NAMES[3]}')
                count_not_fixable += 1
                continue

        vf.to_vital(mini_path)
        count_minified += 1
    else:
        count_present += 1

print()
print(f'Count of cases of interest:           {cases_of_interest_idx.shape[0]}')
print(f'Count of vital files minified:        {count_minified}')
print(f'Count of vital files already present: {count_present}')
print(f'Count of vital files missing tracks:  {count_missing_tracks}')
print(f'Count of vital files not fixable:     {count_not_fixable}')
Count of cases of interest:           2763
Count of vital files minified:        0
Count of vital files already present: 2763
Count of vital files missing tracks:  0
Count of vital files not fixable:     0

Filtering¶

Preprocessing characteristics are different for each of the three signal categories:

  • ABP: no preprocessing, use as-is
  • ECG: apply a 1-40Hz bandpass filter, then perform Z-score normalization
  • EEG: apply a 0.5-50Hz bandpass filter

apply_bandpass_filter() implements the bandpass filter using scipy.signal

apply_zscore_normalization() implements the Z-score normalization using numpy

In [30]:
from scipy.signal import butter, lfilter, spectrogram

# define two methods for data preprocessing

def apply_bandpass_filter(data, lowcut, highcut, fs, order=5):
    b, a = butter(order, [lowcut, highcut], fs=fs, btype='band')
    y = lfilter(b, a, np.nan_to_num(data))
    return y

def apply_zscore_normalization(signal):
    mean = np.nanmean(signal)
    std = np.nanstd(signal)
    return (signal - mean) / std
In [31]:
# Filtering Demonstration

# temp experimental, code to be incorporated into overall preloader process
# for now it's just dumping example plots of the before/after filtered signal data
caseidx = 1
file_path = f"{VITAL_MINI}/{caseidx:04d}_mini.vital"
vf = vitaldb.VitalFile(file_path, TRACK_NAMES)

originalAbp = None
filteredAbp = None
originalEcg = None
filteredEcg = None
originalEeg = None
filteredEeg = None

ABP_TRACK_NAME = "SNUADC/ART"
ECG_TRACK_NAME = "SNUADC/ECG_II"
EEG_TRACK_NAME = "BIS/EEG1_WAV"

for i, (track_name, rate) in enumerate(zip(TRACK_NAMES, TRACK_SRATES)):
    # Get samples for this track
    track_samples = vf.get_track_samples(track_name, 1/rate)
    #track_samples, _ = vf.get_samples(track_name, 1/rate)
    print(f"Track {track_name} @ {rate}Hz shape {len(track_samples)}")

    if track_name == ABP_TRACK_NAME:
        # ABP waveforms are used without further pre-processing
        originalAbp = track_samples
        filteredAbp = track_samples
    elif track_name == ECG_TRACK_NAME:
        originalEcg = track_samples
        # ECG waveforms are band-pass filtered between 1 and 40 Hz, and Z-score normalized
        # first apply bandpass filter
        filteredEcg = apply_bandpass_filter(track_samples, 1, 40, rate)
        # then do z-score normalization
        filteredEcg = apply_zscore_normalization(filteredEcg)
    elif track_name == EEG_TRACK_NAME:
        # EEG waveforms are band-pass filtered between 0.5 and 50 Hz
        originalEeg = track_samples
        filteredEeg = apply_bandpass_filter(track_samples, 0.5, 50, rate, 2)

def plotSignal(data, title):
    plt.figure(figsize=(20, 5))
    plt.plot(data)
    plt.title(title)
    plt.show()

plotSignal(originalAbp, "Original ABP")
plotSignal(originalAbp, "Unfiltered ABP")
plotSignal(originalEcg, "Original ECG")
plotSignal(filteredEcg, "Filtered ECG")
plotSignal(originalEeg, "Original EEG")
plotSignal(filteredEeg, "Filtered EEG")
Track SNUADC/ART @ 500Hz shape 5771049
Track SNUADC/ECG_II @ 500Hz shape 5771049
Track BIS/EEG1_WAV @ 128Hz shape 1477389
In [32]:
# Preprocess data tracks
ABP_TRACK_NAME = "SNUADC/ART"
ECG_TRACK_NAME = "SNUADC/ECG_II"
EEG_TRACK_NAME = "BIS/EEG1_WAV"
EVENT_TRACK_NAME = "EVENT"
MINI_FILE_FOLDER = VITAL_MINI
CACHE_FILE_FOLDER = VITAL_PREPROCESS_SCRATCH

if RESET_CACHE:
    TRACK_CACHE = None
    SEGMENT_CACHE = None

if TRACK_CACHE is None:
    TRACK_CACHE = {}
    SEGMENT_CACHE = {}

def get_track_data(case, print_when_file_loaded = False):
    parsedFile = None
    abp = None
    eeg = None
    ecg = None
    events = None

    for i, (track_name, rate) in enumerate(zip(EXTRACTION_TRACK_NAMES, EXTRACTION_TRACK_SRATES)):
        # use integer case id and track name, delimited by pipe, as cache key
        cache_label = f"{case}|{track_name}"
        
        if cache_label not in TRACK_CACHE:
            if parsedFile is None:
                file_path = f"{MINI_FILE_FOLDER}/{case:04d}_mini.vital"
                if print_when_file_loaded:
                    print(f"[{datetime.now()}] Loading vital file {file_path}")
                parsedFile = vitaldb.VitalFile(file_path, EXTRACTION_TRACK_NAMES)
            
            dataset = np.array(parsedFile.get_track_samples(track_name, 1/rate))
            
            if track_name == ABP_TRACK_NAME:
                # no filtering for ABP
                abp = dataset
                abp = pd.DataFrame(abp).ffill(axis=0).bfill(axis=0)[0].values
                if USE_MEMORY_CACHING:
                    TRACK_CACHE[cache_label] = abp
            elif track_name == ECG_TRACK_NAME:
                ecg = dataset
                # apply ECG filtering: first bandpass then do z-score normalization
                ecg = pd.DataFrame(ecg).ffill(axis=0).bfill(axis=0)[0].values
                ecg = apply_bandpass_filter(ecg, 1, 40, rate, 2)
                ecg = apply_zscore_normalization(ecg)
                
                if USE_MEMORY_CACHING:
                    TRACK_CACHE[cache_label] = ecg
            elif track_name == EEG_TRACK_NAME:
                eeg = dataset
                eeg = pd.DataFrame(eeg).ffill(axis=0).bfill(axis=0)[0].values
                # apply EEG filtering: bandpass only
                eeg = apply_bandpass_filter(eeg, 0.5, 50, rate, 2)
                if USE_MEMORY_CACHING:
                    TRACK_CACHE[cache_label] = eeg
            elif track_name == EVENT_TRACK_NAME:
                events = dataset
                if USE_MEMORY_CACHING:
                    TRACK_CACHE[cache_label] = events
        else:
            # cache hit, pull from cache
            if track_name == ABP_TRACK_NAME:
                abp = TRACK_CACHE[cache_label]
            elif track_name == ECG_TRACK_NAME:
                ecg = TRACK_CACHE[cache_label]
            elif track_name == EEG_TRACK_NAME:
                eeg = TRACK_CACHE[cache_label]
            elif track_name == EVENT_TRACK_NAME:
                events = TRACK_CACHE[cache_label]

    return (abp, ecg, eeg, events)

# ABP waveforms are used without further pre-processing
# ECG waveforms are band-pass filtered between 1 and 40 Hz, and Z-score normalized
# EEG waveforms are band-pass filtered between 0.5 and 50 Hz
if PRELOADING_CASES:
    # determine disk cache file label
    maxlabel = "ALL"
    if MAX_CASES is not None:
        maxlabel = str(MAX_CASES)
    picklefile = f"{CACHE_FILE_FOLDER}/{PREDICTION_WINDOW}_minutes_MAX{maxlabel}.trackcache"

    for track in tqdm(cases_of_interest_idx):
        # getting track data will cause a cache-check and fill when missing
        # will also apply appropriate filtering per track
        get_track_data(track, False)
    
    print(f"Generated track cache, {len(TRACK_CACHE)} records generated")


def get_segment_data(file_path):
    abp = None
    eeg = None
    ecg = None

    if USE_MEMORY_CACHING:
        if file_path in SEGMENT_CACHE:
            (abp, ecg, eeg) = SEGMENT_CACHE[file_path]
            return (abp, ecg, eeg)

    try:
        with h5py.File(file_path, 'r') as f:
            abp = np.array(f['abp'])
            ecg = np.array(f['ecg'])
            eeg = np.array(f['eeg'])
        
        abp = np.array(abp)
        eeg = np.array(eeg)
        ecg = np.array(ecg)

        if len(abp) > 30000:
            abp = abp[:30000]
        elif len(ecg) < 30000:
            abp = np.resize(abp, (30000))

        if len(ecg) > 30000:
            ecg = ecg[:30000]
        elif len(ecg) < 30000:
            ecg = np.resize(ecg, (30000))

        if len(eeg) > 7680:
            eeg = eeg[:7680]
        elif len(eeg) < 7680:
            eeg = np.resize(eeg, (7680))

        if USE_MEMORY_CACHING:
            SEGMENT_CACHE[file_path] = (abp, ecg, eeg)
    except:
        abp = None
        ecg = None
        eeg = None

    return (abp, ecg, eeg)

The following method is adapted from the preprocessing block of reference [6] (https://github.com/vitaldb/examples/blob/master/hypotension_art.ipynb)

The approach first finds an interoperative hypotensive event in the ABP waveform. It then backtracks to earlier in the waveform to extract a 60 second segment representing the waveform feature to use as model input. The figure below shows an example of this approach and is reproduced from the VitalDB example notebook referenced above.

Feature segment extraction

In [33]:
def getSurgeryBoundariesInSeconds(event, debug=False):
    eventIndices = np.argwhere(event==event)
    # we are looking for the last index where the string contains 'start
    lastStart = 0
    firstFinish = len(event)-1
    
    # find last start
    for idx in eventIndices:
        if 'started' in event[idx[0]]:
            if debug:
                print(event[idx[0]])
                print(idx[0])
            lastStart = idx[0]
    
    # find first finish
    for idx in eventIndices:
        if 'finish' in event[idx[0]]:
            if debug:
                print(event[idx[0]])
                print(idx[0])

            firstFinish = idx[0]
            break
    
    if debug:
        print(f'lastStart, firstFinish: {lastStart}, {firstFinish}')
    return (lastStart, firstFinish)
In [34]:
def areCaseSegmentsCached(caseid):
    seg_folder = f"{VITAL_EXTRACTED_SEGMENTS}/{caseid:04d}"
    return os.path.exists(seg_folder) and len(os.listdir(seg_folder)) > 0
In [35]:
def isAbpSegmentValidNumpy(samples, debug=False):
    valid = True
    if np.isnan(samples).mean() > 0.1:
        valid = False
        if debug:
            print(f">10% NaN")
    elif (samples > 200).any():
        valid = False
        if debug:
            print(f"Presence of BP > 200")
    elif (samples < 30).any():
        valid = False
        if debug:
            print(f"Presence of BP < 30")
    elif np.max(samples) - np.min(samples) < 30:
        if debug:
            print(f"Max - Min test < 30")
        valid = False
    elif (np.abs(np.diff(samples)) > 30).any():  # abrupt change -> noise
        if debug:
            print(f"Abrupt change (noise)")
        valid = False
    
    return valid
In [36]:
def isAbpSegmentValid(vf, debug=False):
    ABP_ECG_SRATE_HZ = 500
    ABP_TRACK_NAME = "SNUADC/ART"

    samples = np.array(vf.get_track_samples(ABP_TRACK_NAME, 1/ABP_ECG_SRATE_HZ))
    return isAbpSegmentValidNumpy(samples, debug)
In [37]:
def saveCaseSegments(caseid, positiveSegments, negativeSegments, compresslevel=9, debug=False, forceWrite=False):
    if len(positiveSegments) == 0 and len(negativeSegments) == 0:
        # exit early if no events found
        print(f'{caseid}: exit early, no segments to save')
        return

    # event composition
    # predictiveSegmentStart in seconds, predictiveSegmentEnd in seconds, predWindow (0 for negative), abp, ecg, eeg)
    # 0start, 1end, 2predwindow, 3abp, 4ecg, 5eeg

    seg_folder = f"{VITAL_EXTRACTED_SEGMENTS}/{caseid:04d}"
    if not os.path.exists(seg_folder):
        # if directory needs to be created, then there are no cached segments
        os.mkdir(seg_folder)
    else:
        if not forceWrite:
            # exit early if folder already exists, case already produced
            return

    # prior to writing files out, clear existing files
    for filename in os.listdir(seg_folder):
        file_path = os.path.join(seg_folder, filename)
        if debug:
            print(f'deleting: {file_path}')
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
        except Exception as e:
            print('Failed to delete %s. Reason: %s' % (file_path, e))
    
    count_pos_saved = 0
    for i in range(0, len(positiveSegments)):
        event = positiveSegments[i]
        startIndex = event[0]
        endIndex = event[1]
        predWindow = event[2]
        abp = event[3]
        #ecg = event[4]
        #eeg = event[5]

        seg_filename = f"{caseid:04d}_{startIndex}_{predWindow:02d}_True.h5"
        seg_fullpath = f"{seg_folder}/{seg_filename}"
        if isAbpSegmentValidNumpy(abp, debug):
            count_pos_saved += 1

            abp = abp.tolist()
            ecg = event[4].tolist()
            eeg = event[5].tolist()
        
            f = h5py.File(seg_fullpath, "w")
            f.create_dataset('abp', data=abp, compression="gzip", compression_opts=compresslevel)
            f.create_dataset('ecg', data=ecg, compression="gzip", compression_opts=compresslevel)
            f.create_dataset('eeg', data=eeg, compression="gzip", compression_opts=compresslevel)
            
            f.flush()
            f.close()
            f = None

            abp = None
            ecg = None
            eeg = None

            # f.create_dataset('label', data=[1], compression="gzip", compression_opts=compresslevel)
            # f.create_dataset('pred_window', data=[event[2]], compression="gzip", compression_opts=compresslevel)
            # f.create_dataset('caseid', data=[caseid], compression="gzip", compression_opts=compresslevel)
        elif debug:
            print(f"{caseid:04d} {predWindow:02d}min {startIndex} starttime = ignored, segment validity issues")

    count_neg_saved = 0
    for i in range(0, len(negativeSegments)):
        event = negativeSegments[i]
        startIndex = event[0]
        endIndex = event[1]
        predWindow = event[2]
        abp = event[3]
        #ecg = event[4]
        #eeg = event[5]

        seg_filename = f"{caseid:04d}_{startIndex}_0_False.h5"
        seg_fullpath = f"{seg_folder}/{seg_filename}"
        if isAbpSegmentValidNumpy(abp, debug):
            count_neg_saved += 1

            abp = abp.tolist()
            ecg = event[4].tolist()
            eeg = event[5].tolist()
            
            f = h5py.File(seg_fullpath, "w")
            f.create_dataset('abp', data=abp, compression="gzip", compression_opts=compresslevel)
            f.create_dataset('ecg', data=ecg, compression="gzip", compression_opts=compresslevel)
            f.create_dataset('eeg', data=eeg, compression="gzip", compression_opts=compresslevel)
            
            f.flush()
            f.close()
            f = None

            abp = None
            ecg = None
            eeg = None

            # f.create_dataset('label', data=[0], compression="gzip", compression_opts=compresslevel)
            # f.create_dataset('pred_window', data=[0], compression="gzip", compression_opts=compresslevel)
            # f.create_dataset('caseid', data=[caseid], compression="gzip", compression_opts=compresslevel)
        elif debug:
            print(f"{caseid:04d} CleanWindow {startIndex} starttime = ignored, segment validity issues")
            
    if count_neg_saved == 0 and count_pos_saved == 0:
        print(f'{caseid}: nothing saved, all segments filtered')
In [38]:
# Generate hypotensive events
# Hypotensive events are defined as a 1-minute interval with sustained ABP of less than 65 mmHg
# Note: Hypotensive events should be at least 20 minutes apart to minimize potential residual effects from previous events
# Generate hypotension non-events
# To sample non-events, 30-minute segments where the ABP was above 75 mmHG were selected, and then
# three one-minute samples of each waveform were obtained from the middle of the segment
# both occur in extract_segments
#VITAL_EXTRACTED_SEGMENTS
def extract_segments(
    cases_of_interest_idx,
    debug=False,
    checkCache=True,
    forceWrite=False,
    returnSegments=False,
    skipInvalidCleanEvents=False,
    skipInvalidIohEvents=False
):
    # Sampling rate for ABP and ECG, Hz. These rates should be the same. Default = 500
    ABP_ECG_SRATE_HZ = 500

    # Sampling rate for EEG. Default = 128
    EEG_SRATE_HZ = 128

    # Final dataset for training and testing the model.
    positiveSegmentsMap = {}
    negativeSegmentsMap = {}
    iohEventsMap = {}
    cleanEventsMap = {}

    # Process each case and extract segments. For each segment identify presence of an event in the label zone.
    count_cases = len(cases_of_interest_idx)

    #for case_count, caseid in tqdm(enumerate(cases_of_interest_idx), total=count_cases):
    for case_count, caseid in enumerate(cases_of_interest_idx):
        if debug:
            print(f'Loading case: {caseid:04d}, ({case_count + 1} of {count_cases})')

        if checkCache and areCaseSegmentsCached(caseid):
            if debug:
                print(f'Skipping case: {caseid:04d}, already cached')
            # skip records we've already cached
            continue

        # read the arterial waveform
        (abp, ecg, eeg, event) = get_track_data(caseid)
        if debug:
            print(f'Length of {TRACK_NAMES[0]}:       {abp.shape[0]}')
            print(f'Length of {TRACK_NAMES[1]}:    {ecg.shape[0]}')
            print(f'Length of {TRACK_NAMES[2]}:     {eeg.shape[0]}')

        (startInSeconds, endInSeconds) = getSurgeryBoundariesInSeconds(event)
        if debug:
            print(f"Event markers indicate that surgery begins at {startInSeconds}s and ends at {endInSeconds}s.")

        track_length_seconds = int(len(abp) / ABP_ECG_SRATE_HZ)
        if debug:
            print(f"Processing case {caseid} with length {track_length_seconds}s")

        
        # check if the ABP segment in the surgery window is valid
        if debug:
            isSurgerySegmentValid = isAbpSegmentValidNumpy(abp[startInSeconds:endInSeconds])
            print(f'{caseid}: surgery segment valid: {isSurgerySegmentValid}')
        
        iohEvents = []
        cleanEvents = []
        i = 0
        started = False
        eofReached = False
        trackStartIndex = None

        # set i pointer (which operates in seconds) to start marker for surgery
        i = startInSeconds

        # FIRST PASS
        # in the first forward pass, we are going to identify the start/end boundaries of all IOH events within the case
        ioh_events_valid = []
        
        while i < track_length_seconds - 60 and i < endInSeconds:
            segmentStart = None
            segmentEnd = None
            segFound = False

            # look forward one minute
            abpSeg = abp[i * ABP_ECG_SRATE_HZ:(i + 60) * ABP_ECG_SRATE_HZ]

            # roll forward until we hit a one minute window where mean ABP >= 65 so we know leads are connected and it's tracking
            if not started:
                if np.nanmean(abpSeg) >= 65:
                    started = True
                    trackStartIndex = i
            # if we're started and mean abp for the window is <65, we are starting a new IOH event
            elif np.nanmean(abpSeg) < 65:
                segmentStart = i
                # now seek forward to find end of event, perpetually checking the lats minute of the IOH event
                for j in range(i + 60, track_length_seconds):
                    # look backward one minute
                    abpSegForward = abp[(j - 60) * ABP_ECG_SRATE_HZ:j * ABP_ECG_SRATE_HZ]
                    if np.nanmean(abpSegForward) >= 65:
                        segmentEnd = j - 1
                        break
                if segmentEnd is None:
                    eofReached = True
                else:
                    # otherwise, end of the IOH segment has been reached, record it
                    iohEvents.append((segmentStart, segmentEnd))
                    segFound = True
                    
                    if skipInvalidIohEvents:
                        isIohSegmentValid = isAbpSegmentValidNumpy(abpSeg)
                        ioh_events_valid.append(isIohSegmentValid)
                        if debug:
                            print(f'{caseid}: ioh segment valid: {isIohSegmentValid}, {segmentStart}, {segmentEnd}, {t_abp.shape}')
                    else:
                        ioh_events_valid.append(True)

            i += 1
            if not started:
                continue
            elif eofReached:
                break
            elif segFound:
                i = segmentEnd + 1

        # SECOND PASS
        # in the second forward pass, we are going to identify the start/end boundaries of all non-overlapping 30 minute "clean" windows
        # reuse the 'start of signal' index from our first pass
        if trackStartIndex is None:
            trackStartIndex = startInSeconds
        i = trackStartIndex
        eofReached = False

        clean_events_valid = []
        
        while i < track_length_seconds - 1800 and i < endInSeconds:
            segmentStart = None
            segmentEnd = None
            segFound = False

            startIndex = i
            endIndex = i + 1800

            # check to see if this 30 minute window overlaps any IOH events, if so ffwd to end of latest overlapping IOH
            overlapFound = False
            latestEnd = None
            for event in iohEvents:
                # case 1: starts during an event
                if startIndex >= event[0] and startIndex < event[1]:
                    latestEnd = event[1]
                    overlapFound = True
                # case 2: ends during an event
                elif endIndex >= event[0] and endIndex < event[1]:
                    latestEnd = event[1]
                    overlapFound = True
                # case 3: event occurs entirely inside of the window
                elif startIndex < event[0] and endIndex > event[1]:
                    latestEnd = event[1]
                    overlapFound = True

            # FFWD if we found an overlap
            if overlapFound:
                i = latestEnd + 1
                continue

            # look forward 30 minutes
            abpSeg = abp[startIndex * ABP_ECG_SRATE_HZ:endIndex * ABP_ECG_SRATE_HZ]

            # if we're started and mean abp for the window is >= 75, we are starting a new clean event
            if np.nanmean(abpSeg) >= 75:
                overlapFound = False
                latestEnd = None
                for event in iohEvents:
                    # case 1: starts during an event
                    if startIndex >= event[0] and startIndex < event[1]:
                        latestEnd = event[1]
                        overlapFound = True
                    # case 2: ends during an event
                    elif endIndex >= event[0] and endIndex < event[1]:
                        latestEnd = event[1]
                        overlapFound = True
                    # case 3: event occurs entirely inside of the window
                    elif startIndex < event[0] and endIndex > event[1]:
                        latestEnd = event[1]
                        overlapFound = True

                if not overlapFound:
                    segFound = True
                    segmentEnd = endIndex
                    cleanEvents.append((startIndex, endIndex))
                    
                    if skipInvalidCleanEvents:
                        isCleanSegmentValid = isAbpSegmentValidNumpy(abpSeg)
                        clean_events_valid.append(isCleanSegmentValid)
                        if debug:
                            print(f'{caseid}: clean segment valid: {isCleanSegmentValid}, {startIndex}, {endIndex}, {abpSeg.shape}')
                    else:
                        clean_events_valid.append(True)

            i += 10
            if segFound:
                i = segmentEnd + 1

        if debug:
            print(f"IOH Events for case {caseid}: {iohEvents}")
            print(f"Clean Events for case {caseid}: {cleanEvents}")

        positiveSegments = []
        negativeSegments = []

        # THIRD PASS
        # in the third pass, we will use the collections of ioh event windows to generate our actual extracted segments based on our prediction window (positive labels)
        for i in range(0, len(iohEvents)):
            # Don't extract segments from invalid IOH event windows.
            if not ioh_events_valid[i]:
                continue

            if debug:
                print(f"Checking event {iohEvents[i]}")
            # we want to review current event boundaries, as well as previous event boundaries if available
            event = iohEvents[i]
            previousEvent = None
            if i > 0:
                previousEvent = iohEvents[i - 1]

            for predWindow in ALL_PREDICTION_WINDOWS:
                if debug:
                    print(f"Checking event {iohEvents[i]} for pred {predWindow}")
                iohEventStart = event[0]
                predictiveSegmentEnd = event[0] - (predWindow*60)
                predictiveSegmentStart = predictiveSegmentEnd - 60

                if (predictiveSegmentStart < 0):
                    # don't rewind before the beginning of the track
                    if debug:
                        print(f"Checking event {iohEvents[i]} for pred {predWindow} - exit, before beginning")
                    continue
                elif (predictiveSegmentStart < trackStartIndex):
                    # don't rewind before the beginning of signal in track
                    if debug:
                        print(f"Checking event {iohEvents[i]} for pred {predWindow} - exit, before track start")
                    continue
                elif previousEvent is not None:
                    # does this event window come before or during the previous event?
                    overlapFound = False
                    # case 1: starts during an event
                    if predictiveSegmentStart >= previousEvent[0] and predictiveSegmentStart < previousEvent[1]:
                        overlapFound = True
                    # case 2: ends during an event
                    elif iohEventStart >= previousEvent[0] and iohEventStart < previousEvent[1]:
                        overlapFound = True
                    # case 3: event occurs entirely inside of the window
                    elif predictiveSegmentStart < previousEvent[0] and iohEventStart > previousEvent[1]:
                        overlapFound = True
                    # do not extract a case if we overlap witha nother IOH
                    if overlapFound:
                        if debug:
                            print(f"Checking event {iohEvents[i]} for pred {predWindow} - exit, overlap with earlier segment")
                        continue

                # track the positive segment
                positiveSegments.append((predictiveSegmentStart, predictiveSegmentEnd, predWindow,
                    abp[predictiveSegmentStart*ABP_ECG_SRATE_HZ:predictiveSegmentEnd*ABP_ECG_SRATE_HZ],
                    ecg[predictiveSegmentStart*ABP_ECG_SRATE_HZ:predictiveSegmentEnd*ABP_ECG_SRATE_HZ],
                    eeg[predictiveSegmentStart*EEG_SRATE_HZ:predictiveSegmentEnd*EEG_SRATE_HZ]))

        # FOURTH PASS
        # in the fourth and final pass, we will use the collections of clean event windows to generate our actual extracted segments based (negative labels)
        for i in range(0, len(cleanEvents)):
            # Don't extract segments from invalid clean event windows.
            if not clean_events_valid[i]:
                continue
            
            # everything will be 30 minutes long at least
            event = cleanEvents[i]
            # choose sample 1 @ 10 minutes
            # choose sample 2 @ 15 minutes
            # choose sample 3 @ 20 minutes
            timeAtTen = event[0] + 600
            timeAtFifteen = event[0] + 900
            timeAtTwenty = event[0] + 1200

            negativeSegments.append((timeAtTen, timeAtTen + 60, 0,
                                   abp[timeAtTen*ABP_ECG_SRATE_HZ:(timeAtTen + 60)*ABP_ECG_SRATE_HZ],
                                   ecg[timeAtTen*ABP_ECG_SRATE_HZ:(timeAtTen + 60)*ABP_ECG_SRATE_HZ],
                                   eeg[timeAtTen*EEG_SRATE_HZ:(timeAtTen + 60)*EEG_SRATE_HZ]))
            negativeSegments.append((timeAtFifteen, timeAtFifteen + 60, 0,
                                   abp[timeAtFifteen*ABP_ECG_SRATE_HZ:(timeAtFifteen + 60)*ABP_ECG_SRATE_HZ],
                                   ecg[timeAtFifteen*ABP_ECG_SRATE_HZ:(timeAtFifteen + 60)*ABP_ECG_SRATE_HZ],
                                   eeg[timeAtFifteen*EEG_SRATE_HZ:(timeAtFifteen + 60)*EEG_SRATE_HZ]))
            negativeSegments.append((timeAtTwenty, timeAtTwenty + 60, 0,
                                   abp[timeAtTwenty*ABP_ECG_SRATE_HZ:(timeAtTwenty + 60)*ABP_ECG_SRATE_HZ],
                                   ecg[timeAtTwenty*ABP_ECG_SRATE_HZ:(timeAtTwenty + 60)*ABP_ECG_SRATE_HZ],
                                   eeg[timeAtTwenty*EEG_SRATE_HZ:(timeAtTwenty + 60)*EEG_SRATE_HZ]))

        if returnSegments:
            positiveSegmentsMap[caseid] = positiveSegments
            negativeSegmentsMap[caseid] = negativeSegments
            iohEventsMap[caseid] = iohEvents
            cleanEventsMap[caseid] = cleanEvents
        
        saveCaseSegments(caseid, positiveSegments, negativeSegments, 9, debug=debug, forceWrite=forceWrite)

        #if debug:
        print(f'{caseid}: positiveSegments: {len(positiveSegments)}, negativeSegments: {len(negativeSegments)}')

    return positiveSegmentsMap, negativeSegmentsMap, iohEventsMap, cleanEventsMap

Case Extraction - Generage Segments Needed For Training¶

Ensure that all needed segments are in place for the cases that are being used. If data is already stored on disk this method returns immediately.

In [39]:
print('Time to extract segments!')
Time to extract segments!
In [40]:
MANUAL_EXTRACT=True
SKIP_INVALID_CLEAN_EVENTS=True
SKIP_INVALID_IOH_EVENTS=True

if MANUAL_EXTRACT:
    mycoi = cases_of_interest_idx
    #mycoi = cases_of_interest_idx[:2800]
    #mycoi = [1]

    cnt = 0
    mod = 0
    for ci in mycoi:
        cnt += 1
        if mod % 100 == 0:
            print(f'count processed: {mod}, current case index: {ci}')
        try:
            p, n, i, c = extract_segments([ci], debug=False, checkCache=True, 
                                          forceWrite=True, returnSegments=False, 
                                          skipInvalidCleanEvents=SKIP_INVALID_CLEAN_EVENTS,
                                          skipInvalidIohEvents=SKIP_INVALID_IOH_EVENTS)
            p = None
            n = None
            i = None
            c = None
        except:
            print(f'error on extract segment: {ci}')
        mod += 1
    print(f'extracted: {cnt}')
count processed: 0, current case index: 1
count processed: 100, current case index: 229
count processed: 200, current case index: 481
count processed: 300, current case index: 740
count processed: 400, current case index: 954
count processed: 500, current case index: 1160
count processed: 600, current case index: 1367
count processed: 700, current case index: 1595
count processed: 800, current case index: 1822
count processed: 900, current case index: 2055
count processed: 1000, current case index: 2317
count processed: 1100, current case index: 2533
count processed: 1200, current case index: 2775
count processed: 1300, current case index: 3014
count processed: 1400, current case index: 3218
count processed: 1500, current case index: 3442
count processed: 1600, current case index: 3682
count processed: 1700, current case index: 3879
count processed: 1800, current case index: 4109
count processed: 1900, current case index: 4347
count processed: 2000, current case index: 4603
count processed: 2100, current case index: 4830
count processed: 2200, current case index: 5072
count processed: 2300, current case index: 5314
count processed: 2400, current case index: 5568
count processed: 2500, current case index: 5793
count processed: 2600, current case index: 6017
count processed: 2700, current case index: 6248
extracted: 2763

Track and Segment Validity Checks¶

In [41]:
def printAbp(case_id_to_check, plot_invalid_only=False):
        vf_path = f'{VITAL_MINI}/{case_id_to_check:04d}_mini.vital'
        
        if not os.path.isfile(vf_path):
              return
        
        vf = vitaldb.VitalFile(vf_path)
        abp = vf.to_numpy(TRACK_NAMES[0], 1/500)
        
        print(f'Case {case_id_to_check}')
        print(f'ABP Shape: {abp.shape}')

        print(f'nanmin: {np.nanmin(abp)}')
        print(f'nanmean: {np.nanmean(abp)}')
        print(f'nanmax: {np.nanmax(abp)}')
        
        is_valid = isAbpSegmentValidNumpy(abp, debug=True)
        print(f'valid: {is_valid}')

        if plot_invalid_only and is_valid:
            return
            
        plt.figure(figsize=(20, 5))
        plt_color = 'C0' if is_valid else 'red'
        plt.plot(abp, plt_color)
        plt.title(f'ABP - Entire Track - Case {case_id_to_check} - {abp.shape[0] / 500} seconds')
        plt.axhline(y = 65, color = 'maroon', linestyle = '--')
        plt.show()
In [42]:
def printSegments(segmentsMap, case_id_to_check, print_label, normalize=False):
    for (x1, x2, r, abp, ecg, eeg) in segmentsMap[case_id_to_check]:
        print(f'{print_label}: Case {case_id_to_check}')
        print(f'lookback window: {r} min')
        print(f'start time: {x1}')
        print(f'end time: {x2}')
        print(f'length: {x2 - x1} sec')
        
        print(f'ABP Shape: {abp.shape}')
        print(f'ECG Shape: {ecg.shape}')
        print(f'EEG Shape: {eeg.shape}')

        print(f'nanmin: {np.nanmin(abp)}')
        print(f'nanmean: {np.nanmean(abp)}')
        print(f'nanmax: {np.nanmax(abp)}')
        
        is_valid = isAbpSegmentValidNumpy(abp, debug=True)
        print(f'valid: {is_valid}')

        # ABP normalization
        x_abp = np.copy(abp)
        if normalize:
            x_abp -= 65
            x_abp /= 65

        plt.figure(figsize=(20, 5))
        plt_color = 'C0' if is_valid else 'red'
        plt.plot(x_abp, plt_color)
        plt.title('ABP')
        plt.axhline(y = 65, color = 'maroon', linestyle = '--')
        plt.show()

        plt.figure(figsize=(20, 5))
        plt.plot(ecg, 'teal')
        plt.title('ECG')
        plt.show()

        plt.figure(figsize=(20, 5))
        plt.plot(eeg, 'indigo')
        plt.title('EEG')
        plt.show()

        print()
In [43]:
def printEvents(abp_raw, eventsMap, case_id_to_check, print_label, normalize=False):
    for (x1, x2) in eventsMap[case_id_to_check]:
        print(f'{print_label}: Case {case_id_to_check}')
        print(f'start time: {x1}')
        print(f'end time: {x2}')
        print(f'length: {x2 - x1} sec')

        abp = abp_raw[x1*500:x2*500]
        print(f'ABP Shape: {abp.shape}')

        print(f'nanmin: {np.nanmin(abp)}')
        print(f'nanmean: {np.nanmean(abp)}')
        print(f'nanmax: {np.nanmax(abp)}')
        
        is_valid = isAbpSegmentValidNumpy(abp, debug=True)
        print(f'valid: {is_valid}')

        # ABP normalization
        x_abp = np.copy(abp)
        if normalize:
            x_abp -= 65
            x_abp /= 65

        plt.figure(figsize=(20, 5))
        plt_color = 'C0' if is_valid else 'red'
        plt.plot(x_abp, plt_color)
        plt.title('ABP')
        plt.axhline(y = 65, color = 'maroon', linestyle = '--')
        plt.show()

        print()
In [44]:
def moving_average(x, seconds=60):
    w = seconds * 500
    return np.convolve(np.squeeze(x), np.ones(w), 'valid') / w
In [45]:
def printAbpOverlay(
    case_id_to_check,
    positiveSegmentsMap,
    negativeSegmentsMap,
    iohEventsMap,
    cleanEventsMap,
    movingAverage=False
):
    def overlay_segments(plt, segmentsMap, color, linestyle, positive=False):
        for (x1, x2, r, abp, ecg, eeg) in segmentsMap:
            sx1 = x1*500
            sx2 = x2*500
            mycolor = color
            if positive:
                if r == 3:
                    mycolor = 'red'
                elif r == 5:
                    mycolor = 'crimson'
                elif r == 10:
                    mycolor = 'tomato'
                else:
                    mycolor = 'salmon'
            plt.axvline(x = sx1, color = mycolor, linestyle = linestyle)
            plt.axvline(x = sx2, color = mycolor, linestyle = linestyle)
            plt.axvspan(sx1, sx2, facecolor = mycolor, alpha = 0.1)

    def overlay_events(plt, eventsMap, color, linestyle):
        for (x1, x2) in eventsMap:
            sx1 = x1*500
            sx2 = x2*500
            plt.axvline(x = sx1, color = color, linestyle = linestyle)
            plt.axvline(x = sx2, color = color, linestyle = linestyle)
            plt.axvspan(sx1, sx2, facecolor = color, alpha = 0.1)
    
    vf_path = f'{VITAL_MINI}/{case_id_to_check:04d}_mini.vital'

    if not os.path.isfile(vf_path):
          return

    vf = vitaldb.VitalFile(vf_path)
    abp = vf.to_numpy(TRACK_NAMES[0], 1/500)
    
    abp_mov_avg = None
    if movingAverage:
        abp_mov_avg = moving_average(abp)

    print(f'Case {case_id_to_check}')
    print(f'ABP Shape: {abp.shape}')

    print(f'nanmin: {np.nanmin(abp)}')
    print(f'nanmean: {np.nanmean(abp)}')
    print(f'nanmax: {np.nanmax(abp)}')

    is_valid = isAbpSegmentValidNumpy(abp, debug=True)
    print(f'valid: {is_valid}')

    plt.figure(figsize=(24, 8))
    plt_color = 'C0' if is_valid else 'red'
    plt.plot(abp, plt_color)
    plt.title(f'ABP - Entire Track - Case {case_id_to_check} - {abp.shape[0] / 500} seconds')
    plt.axhline(y = 65, color = 'maroon', linestyle = '--')
    
    if movingAverage:
        plt.plot(abp_mov_avg, 'maroon')

    # https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html#linestyles
    
    overlay_segments(plt, positiveSegmentsMap[case_id_to_check], 'crimson', (0, (1, 1)), positive=True)
    
    overlay_segments(plt, negativeSegmentsMap[case_id_to_check], 'teal', (0, (1, 1)))

    overlay_events(plt, iohEventsMap[case_id_to_check], 'brown', '-')
    
    overlay_events(plt, cleanEventsMap[case_id_to_check], 'teal', '-')

    plt.show()

Reality Check All Cases¶

In [46]:
# Global flag to control creating track and segment plots.
# These plots are expensive to create, but very interesting.
# Disable when training in bulk to speed up notebook processing.
PERFORM_TRACK_VALIDITY_CHECKS = False
In [47]:
# Check if all ABPs are well formed. Fast load and scan of the raw track data for ABP.
DISPLAY_REALITY_CHECK_ABP=True
DISPLAY_REALITY_CHECK_ABP_FIRST_ONLY=True

if PERFORM_TRACK_VALIDITY_CHECKS and DISPLAY_REALITY_CHECK_ABP:
    for case_id_to_check in cases_of_interest_idx:
        printAbp(case_id_to_check, plot_invalid_only=False)
        
        if DISPLAY_REALITY_CHECK_ABP_FIRST_ONLY:
            break

Validate Malformed Vital Files - Missing One Or More Tracks¶

In [48]:
# These are Vital Files removed because of malformed ABP waveforms.
DISPLAY_MALFORMED_ABP=True
DISPLAY_MALFORMED_ABP_FIRST_ONLY=True

if PERFORM_TRACK_VALIDITY_CHECKS and DISPLAY_MALFORMED_ABP:
    malformed_case_ids = pd.read_csv('malformed_tracks_filter.csv', header=None, names=['caseid']).set_index('caseid').index

    for case_id_to_check in malformed_case_ids:
        printAbp(case_id_to_check)
        
        if DISPLAY_MALFORMED_ABP_FIRST_ONLY:
            break

Validate Cases With No Segments Saved¶

In [49]:
DISPLAY_NO_SEGMENTS_CASES=True
DISPLAY_NO_SEGMENTS_CASES_FIRST_ONLY=True

if PERFORM_TRACK_VALIDITY_CHECKS and DISPLAY_NO_SEGMENTS_CASES:
    no_segments_case_ids = [3413, 3476, 3533, 3992, 4328, 4648, 4703, 4733, 5130, 5501, 5693, 5908]

    for case_id_to_check in no_segments_case_ids:
        printAbp(case_id_to_check)
        
        if DISPLAY_NO_SEGMENTS_CASES_FIRST_ONLY:
            break

Select Case For Segment Extraction Validation¶

Generate segment data for one or more cases. Perform a deep analysis of event and segment quality.

In [50]:
#mycoi = cases_of_interest_idx
my_cases_of_interest_idx = cases_of_interest_idx[:10]
#mycoi = [1]

# Note: By default, match extract segments processing block above.
# However, regenerate data real time to allow seeing impacts on segment extraction.
# This is why both checkCache and forceWrite are false by default.
positiveSegmentsMap, negativeSegmentsMap, iohEventsMap, cleanEventsMap = None, None, None, None

if PERFORM_TRACK_VALIDITY_CHECKS:
    positiveSegmentsMap, negativeSegmentsMap, iohEventsMap, cleanEventsMap = \
        extract_segments(my_cases_of_interest_idx, debug=False,
                         checkCache=False, forceWrite=False, returnSegments=True,
                         skipInvalidCleanEvents=SKIP_INVALID_CLEAN_EVENTS,
                         skipInvalidIohEvents=SKIP_INVALID_IOH_EVENTS)

Select a specific case to perform detailed low level analysis.

In [51]:
case_id_to_check = my_cases_of_interest_idx[0]

print(case_id_to_check)
print()

if PERFORM_TRACK_VALIDITY_CHECKS:
    print((
        len(positiveSegmentsMap[case_id_to_check]),
        len(negativeSegmentsMap[case_id_to_check]),
        len(iohEventsMap[case_id_to_check]),
        len(cleanEventsMap[case_id_to_check])
    ))
1

In [52]:
if PERFORM_TRACK_VALIDITY_CHECKS:
    printAbp(case_id_to_check)

Positive Events for Case - IOH Events¶

Used to define the range in front of which positive segments will be extracted. Positive samples happen in front of this region.

In [53]:
tmp_abp = None

if PERFORM_TRACK_VALIDITY_CHECKS:
    tmp_vf_path = f'{VITAL_MINI}/{case_id_to_check:04d}_mini.vital'
    tmp_vf = vitaldb.VitalFile(tmp_vf_path)
    tmp_abp = tmp_vf.to_numpy(TRACK_NAMES[0], 1/500)
In [54]:
if PERFORM_TRACK_VALIDITY_CHECKS:
    printEvents(tmp_abp, iohEventsMap, case_id_to_check, 'IOH Event Segment', normalize=False)

Negative Events for Case - Non-IOH Events¶

Used to define the range from in which negative segments will be extracted. Negative samples happen within this region.

In [55]:
if PERFORM_TRACK_VALIDITY_CHECKS:
    printEvents(tmp_abp, cleanEventsMap, case_id_to_check, 'Clean Event Segment', normalize=False)

Positive Segments for Case - IOH Events Predicted Using These¶

One minute regions sampled and used for training the model for "positive" events.

In [56]:
if PERFORM_TRACK_VALIDITY_CHECKS:
    printSegments(positiveSegmentsMap, case_id_to_check, 'Positive Segment - IOH Event', normalize=False)

Negative Segments for Case - Non-IOH Events Predicted Using These¶

One minute regions sampled and used for training the model for "negative" events.

In [57]:
if PERFORM_TRACK_VALIDITY_CHECKS:
    printSegments(negativeSegmentsMap, case_id_to_check, 'Negative Segment - Non-Event', normalize=False)

Overlay Plot of All Events and Segments Extracted¶

For each of the cases in my_cases_of_interest_idx overlay the results of event and segment extraction.

In [58]:
DISPLAY_OVERLAY_CHECK_ABP=True
DISPLAY_OVERLAY_CHECK_ABP_FIRST_ONLY=True

if PERFORM_TRACK_VALIDITY_CHECKS and DISPLAY_OVERLAY_CHECK_ABP:
    for case_id_to_check in my_cases_of_interest_idx:
        printAbpOverlay(case_id_to_check, positiveSegmentsMap, 
                        negativeSegmentsMap, iohEventsMap, cleanEventsMap, movingAverage=True)
        
        if DISPLAY_OVERLAY_CHECK_ABP_FIRST_ONLY:
            break
In [59]:
# free memory
del tmp_abp

Generate Train/Val/Test Splits¶

In [60]:
def get_segment_attributes_from_filename(file_path):
    pieces = os.path.basename(file_path).split('_')
    case = int(pieces[0])
    startX = int(pieces[1])
    predWindow = int(pieces[2])
    label = pieces[3].replace('.h5', '')
    return (case, startX, predWindow, label)
In [61]:
count_negative_samples = 0
count_positive_samples = 0

samples = []

from glob import glob
seg_folder = f"{VITAL_EXTRACTED_SEGMENTS}"
filenames = [y for x in os.walk(seg_folder) for y in glob(os.path.join(x[0], '*.h5'))]

for filename in filenames:
    (case, start_x, pred_window, label) = get_segment_attributes_from_filename(filename)
    #print((case, start_x, pred_window, label))
    
    # only load cases for cases of interest; this folder could have segments for hundreds of cases
    if case not in cases_of_interest_idx:
        continue

    #PREDICTION_WINDOW = 3
    if pred_window == 0 or pred_window == PREDICTION_WINDOW or PREDICTION_WINDOW == 'ALL':
        #print((case, start_x, pred_window, label))
        if label == 'True':
            count_positive_samples += 1
        else:
            count_negative_samples += 1
        sample = (filename, label)
        samples.append(sample)

print()
print(f"samples loaded:         {len(samples):5} ")
print(f'count negative samples: {count_negative_samples:5}')
print(f'count positive samples: {count_positive_samples:5}')
samples loaded:         17045 
count negative samples: 14298
count positive samples:  2747
In [62]:
# Divide by cases
sample_cases = defaultdict(lambda: []) 

for fn, _ in samples:
    (case, start_x, pred_window, label) = get_segment_attributes_from_filename(fn)
    sample_cases[case].append((fn, label))

# understand any missing cases of interest
sample_cases_idx = pd.Index(sample_cases.keys())
missing_case_ids = cases_of_interest_idx.difference(sample_cases_idx)
print(f'cases with no samples: {missing_case_ids.shape[0]}')
print(f'    {missing_case_ids}')
print()
    
# Split data into training, validation, and test sets
# Use 6:1:3 ratio and prevent samples from a single case from being split across different sets
# Note: number of samples at each time point is not the same, because the first event can occur before the 3/5/10/15 minute mark

# Set target sizes
train_ratio = 0.6
val_ratio = 0.1
test_ratio = 1 - train_ratio - val_ratio # ensure ratios sum to 1

# Split samples into train and other
sample_cases_train, sample_cases_other = train_test_split(list(sample_cases.keys()), test_size=(1 - train_ratio), random_state=RANDOM_SEED)

# Split other into val and test
sample_cases_val, sample_cases_test = train_test_split(sample_cases_other, test_size=(test_ratio / (1 - train_ratio)), random_state=RANDOM_SEED)

# Check how many samples are in each set
print(f'Train/Val/Test Summary by Cases')
print(f"Train cases:  {len(sample_cases_train):5}, ({len(sample_cases_train) / len(sample_cases):.2%})")
print(f"Val cases:    {len(sample_cases_val):5}, ({len(sample_cases_val) / len(sample_cases):.2%})")
print(f"Test cases:   {len(sample_cases_test):5}, ({len(sample_cases_test) / len(sample_cases):.2%})")
print(f"Total cases:  {(len(sample_cases_train) + len(sample_cases_val) + len(sample_cases_test)):5}")
cases with no samples: 229
    Index([  13,   58,   59,   92,   93,  137,  148,  163,  208,  244,
       ...
       5945, 5954, 5982, 6013, 6080, 6154, 6233, 6302, 6331, 6359],
      dtype='int64', length=229)

Train/Val/Test Summary by Cases
Train cases:   1520, (59.98%)
Val cases:      253, (9.98%)
Test cases:     761, (30.03%)
Total cases:   2534
In [63]:
sample_cases_train = set(sample_cases_train)
sample_cases_val = set(sample_cases_val)
sample_cases_test = set(sample_cases_test)

samples_train = []
samples_val = []
samples_test = []

for cid, segs in sample_cases.items():
    if cid in sample_cases_train:
        for seg in segs:
            samples_train.append(seg)
    if cid in sample_cases_val:
        for seg in segs:
            samples_val.append(seg)
    if cid in sample_cases_test:
        for seg in segs:
            samples_test.append(seg)
            
# Check how many samples are in each set
print(f'Train/Val/Test Summary by Events')
print(f"Train events:  {len(samples_train):5}, ({len(samples_train) / len(samples):.2%})")
print(f"Val events:    {len(samples_val):5}, ({len(samples_val) / len(samples):.2%})")
print(f"Test events:   {len(samples_test):5}, ({len(samples_test) / len(samples):.2%})")
print(f"Total events:  {(len(samples_train) + len(samples_val) + len(samples_test)):5}")
Train/Val/Test Summary by Events
Train events:  10176, (59.70%)
Val events:     1775, (10.41%)
Test events:    5094, (29.89%)
Total events:  17045

Validate train/val/test Splits¶

In [64]:
PRINT_ALL_CASE_SPLIT_DETAILS = False

case_to_sample_distribution = defaultdict(lambda: {'train': [0, 0], 'val': [0, 0], 'test': [0, 0]})

def populate_case_to_sample_distribution(mysamples, idx):
    neg = 0
    pos = 0
    
    for fn, _ in mysamples:
        (case, start_x, pred_window, label) = get_segment_attributes_from_filename(fn)
        slot = 0 if label == 'False' else 1
        case_to_sample_distribution[case][idx][slot] += 1
        if slot == 0:
            neg += 1
        else:
            pos += 1
                
    return (neg, pos)

train_neg, train_pos = populate_case_to_sample_distribution(samples_train, 'train')
val_neg, val_pos     = populate_case_to_sample_distribution(samples_val,   'val')
test_neg, test_pos   = populate_case_to_sample_distribution(samples_test,  'test')

print(f'Total Cases Present: {len(case_to_sample_distribution):5}')
print()

train_tot = train_pos + train_neg
val_tot = val_pos + val_neg
test_tot = test_pos + test_neg
print(f'Train: P: {train_pos:5} ({(train_pos/train_tot):.2}), N: {train_neg:5} ({(train_neg/train_tot):.2})')
print(f'Val:   P: {val_pos:5} ({(val_pos/val_tot):.2}), N: {val_neg:5} ({(val_neg/val_tot):.2})')
print(f'Test:  P: {test_pos:5} ({(test_pos/test_tot):.2}), N: {test_neg:5}  ({(test_neg/test_tot):.2})')
print()

total_pos = train_pos + val_pos + test_pos
total_neg = train_neg + val_neg + test_neg
total = total_pos + total_neg
print(f'P/N Ratio: {(total_pos)}:{(total_neg)}')
print(f'P Percent: {(total_pos/total):.2}')
print(f'N Percent: {(total_neg/total):.2}')
print()

if PRINT_ALL_CASE_SPLIT_DETAILS:
    for ci in sorted(case_to_sample_distribution.keys()):
        print(f'{ci}: {case_to_sample_distribution[ci]}')
Total Cases Present:  2534

Train: P:  1628 (0.16), N:  8548 (0.84)
Val:   P:   285 (0.16), N:  1490 (0.84)
Test:  P:   834 (0.16), N:  4260  (0.84)

P/N Ratio: 2747:14298
P Percent: 0.16
N Percent: 0.84

In [65]:
def check_data_leakage(full_data, train_data, val_data, test_data):
    # Convert to sets for easier operations
    full_data_set = set(full_data)
    train_data_set = set(train_data)
    val_data_set = set(val_data)
    test_data_set = set(test_data)

    # Check if train, val, test are subsets of full_data
    if not train_data_set.issubset(full_data_set):
        return "Train data has leakage"
    if not val_data_set.issubset(full_data_set):
        return "Validation data has leakage"
    if not test_data_set.issubset(full_data_set):
        return "Test data has leakage"

    # Check if train, val, test are disjoint
    if train_data_set & val_data_set:
        return "Train and validation data are not disjoint"
    if train_data_set & test_data_set:
        return "Train and test data are not disjoint"
    if val_data_set & test_data_set:
        return "Validation and test data are not disjoint"

    return "No data leakage detected"

# Usage
print(check_data_leakage(list(sample_cases.keys()), sample_cases_train, sample_cases_val, sample_cases_test))
No data leakage detected
In [66]:
# Create vitalDataset class
class vitalDataset(Dataset):
    def __init__(self, samples, normalize_abp=False):
        self.samples = samples
        self.normalize_abp = normalize_abp

    def __len__(self):
        return len(self.samples)

    def __getitem__(self, idx):
        # Get metadata for this event
        segment = self.samples[idx]

        file_path = segment[0]
        label = (segment[1] == "True" or segment[1] == "True.vital")

        (abp, ecg, eeg) = get_segment_data(file_path)

        if abp is None or eeg is None or ecg is None:
            return (np.zeros(30000), np.zeros(30000), np.zeros(7680), 0)
        
        if self.normalize_abp:
            abp -= 65
            abp /= 65

        return abp, ecg, eeg, label
In [67]:
NORMALIZE_ABP = False

train_dataset = vitalDataset(samples_train, NORMALIZE_ABP)
val_dataset = vitalDataset(samples_val, NORMALIZE_ABP)
test_dataset = vitalDataset(samples_test, NORMALIZE_ABP)

train/val/test Splits Summary Statistics¶

In [68]:
def generate_nan_means(mydataset):
    xs = np.zeros(len(mydataset))
    ys = np.zeros(len(mydataset), dtype=int)

    for i, (abp, ecg, eeg, y) in enumerate(iter(mydataset)):
        xs[i] = np.nanmean(abp)
        ys[i] = int(y)

    return pd.DataFrame({'abp_nanmean': xs, 'label': ys})
In [69]:
def generate_nan_means_summaries(tr, va, te, group='all'):
    if group == 'all':
        return pd.DataFrame({
            'train': tr.describe()['abp_nanmean'],
            'validation': va.describe()['abp_nanmean'],
            'test': te.describe()['abp_nanmean']
        })
    
    mytr = tr.reset_index()
    myva = va.reset_index()
    myte = te.reset_index()
    
    label_flag = True if group == 'positive' else False
    
    return pd.DataFrame({
        'train':      mytr[mytr['label'] == label_flag].describe()['abp_nanmean'],
        'validation': myva[myva['label'] == label_flag].describe()['abp_nanmean'],
        'test':       myte[myte['label'] == label_flag].describe()['abp_nanmean']
    })
In [70]:
def plot_nan_means(df, plot_label):
    mydf = df.reset_index()

    maxCases = 'ALL' if MAX_CASES is None else MAX_CASES
    plot_title = f'{plot_label} - ABP nanmean Values, {PREDICTION_WINDOW} Minutes, {maxCases} Cases'
    
    ax = mydf[mydf['label'] == False].plot.scatter(
        x='index', y='abp_nanmean', color='DarkBlue', label='Negative', 
        title=plot_title, figsize=(16,9))

    negative_median = mydf[mydf['label'] == False]['abp_nanmean'].median()
    ax.axhline(y=negative_median, color='DarkBlue', linestyle='--', label='Negative Median')
    
    mydf[mydf['label'] == True].plot.scatter(
        x='index', y='abp_nanmean', color='DarkOrange', label='Positive', ax=ax);
    
    positive_median = mydf[mydf['label'] == True]['abp_nanmean'].median()
    ax.axhline(y=positive_median, color='DarkOrange', linestyle='--', label='Positive Median')
    
    ax.legend(loc='upper right')
In [71]:
def plot_nan_means_hist(df):
    df.plot.hist(column=['abp_nanmean'], by='label', bins=50, figsize=(10, 8));
In [72]:
train_abp_nanmeans = generate_nan_means(train_dataset)
val_abp_nanmeans = generate_nan_means(val_dataset)
test_abp_nanmeans = generate_nan_means(test_dataset)

ABP Nanmean Summaries¶

In [73]:
generate_nan_means_summaries(train_abp_nanmeans, val_abp_nanmeans, test_abp_nanmeans)
Out[73]:
train validation test
count 10176.000000 1775.000000 5094.000000
mean 87.252754 87.095616 87.480570
std 11.442130 11.746227 11.662471
min 65.225560 65.551190 65.234710
25% 78.604388 77.939256 78.751634
50% 85.752360 85.388482 86.023006
75% 94.527449 94.769326 94.981103
max 147.949437 141.134119 130.780501
In [74]:
generate_nan_means_summaries(train_abp_nanmeans, val_abp_nanmeans, test_abp_nanmeans, group='positive')
Out[74]:
train validation test
count 1628.000000 285.000000 834.000000
mean 80.600625 81.098882 80.173514
std 10.132182 10.801617 9.391961
min 65.307519 65.551190 65.234710
25% 73.114907 73.305100 73.091645
50% 78.328245 78.162040 78.657464
75% 86.071128 86.946819 84.968657
max 133.189831 125.478617 117.290950
In [75]:
generate_nan_means_summaries(train_abp_nanmeans, val_abp_nanmeans, test_abp_nanmeans, group='negative')
Out[75]:
train validation test
count 8548.000000 1490.000000 4260.000000
mean 88.519678 88.242642 88.911106
std 11.237591 11.572783 11.527907
min 65.225560 66.251166 65.267691
25% 79.997550 79.495683 80.227858
50% 87.158352 86.665100 87.569002
75% 95.555516 95.828094 96.344214
max 147.949437 141.134119 130.780501

ABP Nanmean Histograms¶

In [76]:
plot_nan_means_hist(train_abp_nanmeans)
In [77]:
plot_nan_means_hist(val_abp_nanmeans)
In [78]:
plot_nan_means_hist(test_abp_nanmeans)

ABP Nanmean Scatter Plots¶

In [79]:
plot_nan_means(train_abp_nanmeans, 'Train')
In [80]:
plot_nan_means(val_abp_nanmeans, 'Validation')
In [81]:
plot_nan_means(test_abp_nanmeans, 'Test')
In [82]:
# Cleanup
del train_abp_nanmeans
del val_abp_nanmeans
del test_abp_nanmeans

Classification Studies¶

Check if data can be easily classified using non-deep learning methods. Create a balanced sample of IOH and non-IOH events and use a simple classifier to see if the data can be easily separated. Datasets which can be easily separated by non-deep learning methods should also be easily classified by deep learning models.

In [83]:
MAX_CLASSIFICATION_SAMPLES = 250
MAX_SAMPLE_SIZE = 1600
classification_sample_size = MAX_SAMPLE_SIZE if len(samples) >= MAX_SAMPLE_SIZE else len(samples)

classification_samples = random.sample(samples, classification_sample_size)

positive_samples = []
negative_samples = []

for sample in classification_samples:
    (sampleAbp, sampleEcg, sampleEeg) = get_segment_data(sample[0])
    
    if sample[1] == "True":
        positive_samples.append([sample[0], True, sampleAbp, sampleEcg, sampleEeg])
    else:
        negative_samples.append([sample[0], False, sampleAbp, sampleEcg, sampleEeg])

positive_samples = pd.DataFrame(positive_samples, columns=["file_path", "segment_label", "segment_abp", "segment_ecg", "segment_eeg"])
negative_samples = pd.DataFrame(negative_samples, columns=["file_path", "segment_label", "segment_abp", "segment_ecg", "segment_eeg"])

total_to_sample_pos = MAX_CLASSIFICATION_SAMPLES if len(positive_samples) >= MAX_CLASSIFICATION_SAMPLES else len(positive_samples)
total_to_sample_neg = MAX_CLASSIFICATION_SAMPLES if len(negative_samples) >= MAX_CLASSIFICATION_SAMPLES else len(negative_samples)

# Select up to 150 random samples where segment_label is True
positive_samples = positive_samples.sample(total_to_sample_pos, random_state=RANDOM_SEED)
# Select up to 150 random samples where segment_label is False
negative_samples = negative_samples.sample(total_to_sample_neg, random_state=RANDOM_SEED)

print(f'positive_samples: {len(positive_samples)}')
print(f'negative_samples: {len(negative_samples)}')

# Combine the positive and negative samples
samples_balanced = pd.concat([positive_samples, negative_samples])
positive_samples: 250
negative_samples: 250

Define function to build data for study. Each waveform field can be enabled or disabled:

In [84]:
def get_x_y(samples, use_abp, use_ecg, use_eeg):
    # Create X and y, using data from `samples_balanced` and the `use_abp`, `use_ecg`, and `use_eeg` variables
    X = []
    y = []
    for i in range(len(samples)):
        row = samples.iloc[i]
        sample = np.array([])
        if use_abp:
            if len(row['segment_abp']) != 30000:
                print(len(row['segment_abp']))
            sample = np.append(sample, row['segment_abp'])
        if use_ecg:
            if len(row['segment_ecg']) != 30000:
                print(len(row['segment_ecg']))
            sample = np.append(sample, row['segment_ecg'])
        if use_eeg:
            if len(row['segment_eeg']) != 7680:
                print(len(row['segment_eeg']))
            sample = np.append(sample, row['segment_eeg'])
        X.append(sample)
        # Convert the label from boolean to 0 or 1
        y.append(int(row['segment_label']))
    return X, y

KNN¶

Define KNN run. This is configurable to enable or disable different data channels so that we can study them individually or together:

In [85]:
N_NEIGHBORS = 20

def run_knn(samples, use_abp, use_ecg, use_eeg):
    # Get samples
    X,y = get_x_y(samples, use_abp, use_ecg, use_eeg)

    # Split samples into train and val
    knn_X_train, knn_X_test, knn_y_train, knn_y_test = train_test_split(X, y, test_size=0.2, random_state=RANDOM_SEED)

    # Normalize the data
    scaler = StandardScaler()
    scaler.fit(knn_X_train)

    knn_X_train = scaler.transform(knn_X_train)
    knn_X_test = scaler.transform(knn_X_test)

    # Initialize the KNN classifier
    knn = KNeighborsClassifier(n_neighbors=N_NEIGHBORS)

    # Train the KNN classifier
    knn.fit(knn_X_train, knn_y_train)

    # Make predictions on the test set
    knn_y_pred = knn.predict(knn_X_test)

    # Evaluate the KNN classifier
    print(f"ABP: {use_abp}, ECG: {use_ecg}, EEG: {use_eeg}")
    print(f"Confusion matrix:\n{confusion_matrix(knn_y_test, knn_y_pred)}")
    print(f"Classification report:\n{classification_report(knn_y_test, knn_y_pred)}")

Study each waveform independently, then ABP+EEG (which had best results in paper), and ABP+ECG+EEG:

In [86]:
run_knn(samples_balanced, use_abp=True, use_ecg=False, use_eeg=False)
run_knn(samples_balanced, use_abp=False, use_ecg=True, use_eeg=False)
run_knn(samples_balanced, use_abp=False, use_ecg=False, use_eeg=True)
run_knn(samples_balanced, use_abp=True, use_ecg=False, use_eeg=True)
run_knn(samples_balanced, use_abp=True, use_ecg=True, use_eeg=True)
ABP: True, ECG: False, EEG: False
Confusion matrix:
[[38 16]
 [30 16]]
Classification report:
              precision    recall  f1-score   support

           0       0.56      0.70      0.62        54
           1       0.50      0.35      0.41        46

    accuracy                           0.54       100
   macro avg       0.53      0.53      0.52       100
weighted avg       0.53      0.54      0.53       100

ABP: False, ECG: True, EEG: False
Confusion matrix:
[[51  3]
 [39  7]]
Classification report:
              precision    recall  f1-score   support

           0       0.57      0.94      0.71        54
           1       0.70      0.15      0.25        46

    accuracy                           0.58       100
   macro avg       0.63      0.55      0.48       100
weighted avg       0.63      0.58      0.50       100

ABP: False, ECG: False, EEG: True
Confusion matrix:
[[15 39]
 [12 34]]
Classification report:
              precision    recall  f1-score   support

           0       0.56      0.28      0.37        54
           1       0.47      0.74      0.57        46

    accuracy                           0.49       100
   macro avg       0.51      0.51      0.47       100
weighted avg       0.51      0.49      0.46       100

ABP: True, ECG: False, EEG: True
Confusion matrix:
[[42 12]
 [33 13]]
Classification report:
              precision    recall  f1-score   support

           0       0.56      0.78      0.65        54
           1       0.52      0.28      0.37        46

    accuracy                           0.55       100
   macro avg       0.54      0.53      0.51       100
weighted avg       0.54      0.55      0.52       100

ABP: True, ECG: True, EEG: True
Confusion matrix:
[[22 32]
 [16 30]]
Classification report:
              precision    recall  f1-score   support

           0       0.58      0.41      0.48        54
           1       0.48      0.65      0.56        46

    accuracy                           0.52       100
   macro avg       0.53      0.53      0.52       100
weighted avg       0.54      0.52      0.51       100

Based on the data above, the ABP data alone is strongly predictive based on the macro average F1-score of 0.90. The ECG and EEG data are weakly predictive with F1 scores of 0.33 and 0.64, respectively. The ABP+EEG data is also strongly predictive with an F1 score of 0.88, and ABP+ECG+EEG data somewhat predictive with an F1 score of 0.79.

Models based on ABP data alone, or ABP+EEG data are expected to train easily with good performance. The other signals appear to mostly add noise and are not strongly predictive. This agrees with the results from the paper.

t-SNE¶

Define t-SNE run. This is configurable to enable or disable different data channels so that we can study them individually or together:

In [87]:
def run_tsne(samples, use_abp, use_ecg, use_eeg):
    # Get samples
    X,y = get_x_y(samples, use_abp, use_ecg, use_eeg)
    
    # Convert X and y to numpy arrays
    X = np.array(X)
    y = np.array(y)

    # Run t-SNE on the samples
    tsne = TSNE(n_components=len(np.unique(y)), random_state=RANDOM_SEED)
    X_tsne = tsne.fit_transform(X)
    
    # Create a scatter plot of the t-SNE representation
    plt.figure(figsize=(16, 9))
    plt.title(f"use_abp={use_abp}, use_ecg={use_ecg}, use_eeg={use_eeg}")
    for i, label in enumerate(set(y)):
        plt.scatter(X_tsne[y == label, 0], X_tsne[y == label, 1], label=label)
    plt.legend()
    plt.show()

Study each waveform independently, then ABP+EEG (which had best results in paper), and ABP+ECG+EEG:

In [88]:
run_tsne(samples_balanced, use_abp=True, use_ecg=False, use_eeg=False)
run_tsne(samples_balanced, use_abp=False, use_ecg=True, use_eeg=False)
run_tsne(samples_balanced, use_abp=False, use_ecg=False, use_eeg=True)
run_tsne(samples_balanced, use_abp=True, use_ecg=False, use_eeg=True)
run_tsne(samples_balanced, use_abp=True, use_ecg=True, use_eeg=True)

Based on the plots above, it appears that ABP alone, ABP+EEG and ABP+ECG+EEG are somewhat separable, though with outliers, and should be trainable by our model. The ECG and EEG data are not easily separable from the other data. This agrees with the results from the paper.

In [89]:
# cleanup
del samples_balanced

Model¶

The model implementation is based on the CNN architecture described in Jo Y-Y et al. (2022). It is designed to handle 1, 2, or 3 signal categories simultaneously, allowing for flexible model configurations based on different combinations of physiological signals:

  • ABP alone
  • EEG alone
  • ECG alone
  • ABP + EEG
  • ABP + ECG
  • EEG + ECG
  • ABP + EEG + ECG

Model Architecture¶

The architecture, as depicted in Figure 2 from the original paper, utilizes a ResNet-based approach tailored for time-series data from different physiological signals. The model architecture is adapted to handle varying input signal frequencies, with specific hyperparameters for each signal type, particularly EEG, due to its distinct characteristics compared to ABP and ECG. A diagram of the model architecture is shown below:

Architecture of the hypotension risk prediction model using multiple waveforms

Each input signal is processed through a sequence of 12 7-layer residual blocks, followed by a flattening process and a linear transformation to produce a 32-dimensional feature vector per signal type. These vectors are then concatenated (if multiple signals are used) and passed through two additional linear layers to produce a single output vector, representing the IOH index. A threshold is determined experimentally in order to minimize the differene between the sensitivity and specificity and is applied to this index to perform binary classification for predicting IOH events.

The hyperparameters for the residual blocks are specified in Supplemental Table 1 from the original paper and vary for different signal type.

A forward pass through the model passes through 85 layers before concatenation, followed by two more linear layers and finally a sigmoid activation layer to produce the prediction measure.

Residual Block Definition¶

Each residual block consists of the following seven layers:

  • Batch normalization
  • ReLU
  • Dropout (0.5)
  • 1D convolution
  • Batch normalization
  • ReLU
  • 1D convolution

Skip connections are included to aid in gradient flow during training, with optional 1D convolution in the skip connection to align dimensions.

Residual Block Hyperparameters¶

The hyperparameters are detailed in Supplemental Table 1 of the original paper. A screenshot of these hyperparameters is provided for reference below:

Supplemental Table 1 from original paper

Note: Please be aware of a transcription error in the original paper's Supplemental Table 1 for the ECG+ABP configuration in Residual Blocks 11 and 12, where the output size should be 469 6 instead of the reported 496 6.

Training Objectives¶

Our model uses binary cross entropy as the loss function and Adam as the optimizer, consistent with the original study. The learning rate is set at 0.0001, and training is configured to run for up to 100 epochs, with early stopping implemented if no improvement in loss is observed over five consecutive epochs.

In [90]:
# First define the residual block which is reused 12x for each data track for each sample.
# Second define the primary model.
class ResidualBlock(nn.Module):
    def __init__(self, in_features: int, out_features: int, in_channels: int, out_channels: int, kernel_size: int, stride: int = 1, size_down: bool = False, ignoreSkipConnection: bool = False) -> None:
        super(ResidualBlock, self).__init__()
        
        self.ignoreSkipConnection = ignoreSkipConnection

        # calculate the appropriate padding required to ensure expected sequence lengths out of each residual block
        padding = int((((stride-1)*in_features)-stride+kernel_size)/2)

        self.size_down = size_down
        self.bn1 = nn.BatchNorm1d(in_channels)
        self.relu = nn.ReLU()
        self.dropout = nn.Dropout(0.5)
        self.conv1 = nn.Conv1d(in_channels, out_channels, kernel_size=kernel_size, stride=1, padding=padding, bias=False)
        self.bn2 = nn.BatchNorm1d(out_channels)
        self.conv2 = nn.Conv1d(out_channels, out_channels, kernel_size=kernel_size, stride=1, padding=padding, bias=False)
        
        self.residualConv = nn.Conv1d(in_channels, out_channels, kernel_size=kernel_size, stride=1, padding=padding, bias=False)

        # unclear where in sequence this should take place. Size down expressed in Supplemental table S1
        if self.size_down:
            pool_padding = (1 if (in_features % 2 > 0) else 0)
            self.downsample = nn.MaxPool1d(kernel_size=2, stride=2, padding = pool_padding)
        
    def forward(self, x: torch.Tensor) -> torch.Tensor:
        identity = x
        
        out = self.bn1(x)
        out = self.relu(out)
        out = self.dropout(out)
        out = self.conv1(out)

        if self.size_down:
            out = self.downsample(out)

        out = self.bn2(out)
        out = self.relu(out)
        out = self.conv2(out)
        
        if not self.ignoreSkipConnection:
          if out.shape != identity.shape:
              # run the residual through a convolution when necessary
              identity = self.residualConv(identity)
            
              outlen = np.prod(out.shape)
              idlen = np.prod(identity.shape)
              # downsample when required
              if idlen > outlen:
                  identity = self.downsample(identity)
              # match dimensions
              identity = identity.reshape(out.shape)

          # add the residual       
          out += identity

        return  out

class HypotensionCNN(nn.Module):
    def __init__(self, useAbp: bool = True, useEeg: bool = False, useEcg: bool = False, device: str = "cpu", nResiduals: int = 12, ignoreSkipConnection: bool = False, useSigmoid: bool = True) -> None:
        assert useAbp or useEeg or useEcg, "At least one data track must be used"
        assert nResiduals > 0 and nResiduals <= 12, "Number of residual blocks must be between 1 and 12"
        super(HypotensionCNN, self).__init__()

        self.device = device

        self.useAbp = useAbp
        self.useEeg = useEeg
        self.useEcg = useEcg
        self.nResiduals = nResiduals
        self.useSigmoid = useSigmoid

        # Size of the concatenated output from the residual blocks
        concatSize = 0

        if useAbp:
          self.abpBlocks = []
          self.abpMultipliers = [1, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6]
          self.abpSizes = [30000, 15000, 15000, 7500, 7500, 3750, 3750, 1875, 1875, 938, 938, 469, 469]
          for i in range(self.nResiduals):
            downsample = i % 2 == 0
            self.abpBlocks.append(ResidualBlock(self.abpSizes[i], self.abpSizes[i+1], self.abpMultipliers[i], self.abpMultipliers[i+1], 15 if i < 6 else 7, 1, downsample, ignoreSkipConnection))
          self.abpResiduals = nn.Sequential(*self.abpBlocks)
          self.abpFc = nn.Linear(self.abpMultipliers[self.nResiduals] * self.abpSizes[self.nResiduals], 32)
          concatSize += 32
        
        if useEcg:
          self.ecgBlocks = []
          self.ecgMultipliers = [1, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6]
          self.ecgSizes = [30000, 15000, 15000, 7500, 7500, 3750, 3750, 1875, 1875, 938, 938, 469, 469]

          for i in range(self.nResiduals):
            downsample = i % 2 == 0
            self.ecgBlocks.append(ResidualBlock(self.ecgSizes[i], self.ecgSizes[i+1], self.ecgMultipliers[i], self.ecgMultipliers[i+1], 15 if i < 6 else 7, 1, downsample, ignoreSkipConnection))
          self.ecgResiduals = nn.Sequential(*self.ecgBlocks)
          self.ecgFc = nn.Linear(self.ecgMultipliers[self.nResiduals] * self.ecgSizes[self.nResiduals], 32)
          concatSize += 32

        if useEeg:
          self.eegBlocks = []
          self.eegMultipliers = [1, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6]
          self.eegSizes = [7680, 3840, 3840, 1920, 1920, 960, 960, 480, 480, 240, 240, 120, 120]

          for i in range(self.nResiduals):
            downsample = i % 2 == 0
            self.eegBlocks.append(ResidualBlock(self.eegSizes[i], self.eegSizes[i+1], self.eegMultipliers[i], self.eegMultipliers[i+1], 7 if i < 6 else 3, 1, downsample, ignoreSkipConnection))
          self.eegResiduals = nn.Sequential(*self.eegBlocks)
          self.eegFc = nn.Linear(self.eegMultipliers[self.nResiduals] * self.eegSizes[self.nResiduals], 32)
          concatSize += 32

        self.fullLinear1 = nn.Linear(concatSize, 16)
        self.fullLinear2 = nn.Linear(16, 1)
        self.sigmoid = nn.Sigmoid()


    def forward(self, abp: torch.Tensor, eeg: torch.Tensor, ecg: torch.Tensor) -> torch.Tensor:
        batchSize = len(abp)

        # conditionally operate ABP, EEG, and ECG networks
        tensors = []
        if self.useAbp:
          self.abpResiduals.to(self.device)
          abp = self.abpResiduals(abp)
          totalLen = np.prod(abp.shape)
          abp = torch.reshape(abp, (batchSize, int(totalLen / batchSize)))
          abp = self.abpFc(abp)
          tensors.append(abp)

        if self.useEeg:
          self.eegResiduals.to(self.device)
          eeg = self.eegResiduals(eeg)
          totalLen = np.prod(eeg.shape)
          eeg = torch.reshape(eeg, (batchSize, int(totalLen / batchSize)))
          eeg = self.eegFc(eeg)
          tensors.append(eeg)
        
        if self.useEcg:
          self.ecgResiduals.to(self.device)
          ecg = self.ecgResiduals(ecg)
          totalLen = np.prod(ecg.shape)
          ecg = torch.reshape(ecg, (batchSize, int(totalLen / batchSize)))
          ecg = self.ecgFc(ecg)
          tensors.append(ecg)

        # concatenate the tensors along dimension 1 if there's more than one, otherwise use the single tensor
        merged = torch.cat(tensors, dim=1) if len(tensors) > 1 else tensors[0]

        totalLen = np.prod(merged.shape)
        merged = torch.reshape(merged, (batchSize, int(totalLen / batchSize)))
        out = self.fullLinear1(merged)
        out = self.fullLinear2(out)
        if self.useSigmoid:
            out = self.sigmoid(out)

        # We should not be seeing NaNs! If we are, there is a problem upstream.
        #out = torch.nan_to_num(out)
        return out

Training¶

As discussed earlier, our model uses binary cross entropy as the loss function and Adam as the optimizer, consistent with the original study. The learning rate is set at 0.0001, and training is configured to run for up to 100 epochs, with early stopping implemented if no improvement in loss is observed over five consecutive epochs.

In [91]:
def train_model_one_iter(model, device, loss_func, optimizer, train_loader):
    model.train()
    train_losses = []
    
    for abp, ecg, eeg, label in tqdm(train_loader):
        batch = len(abp)
        abp = abp.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        ecg = ecg.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        eeg = eeg.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        label = label.type(torch.float).reshape(batch, 1).to(device)

        optimizer.zero_grad()
        mdl = model(abp, eeg, ecg)
        loss = loss_func(torch.nan_to_num(mdl), label)
        loss.backward()
        optimizer.step()
        train_losses.append(loss.cpu().data.numpy())
    return np.mean(train_losses)
In [92]:
def evaluate_model(model, loss_func, val_loader):
    model.eval()
    val_losses = []
    for abp, ecg, eeg, label in tqdm(val_loader):
        batch = len(abp)

        abp = abp.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        ecg = ecg.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        eeg = eeg.reshape(batch, 1, -1).type(torch.FloatTensor).to(device)
        label = label.type(torch.float).reshape(batch, 1).to(device)

        mdl = model(abp, eeg, ecg)
        loss = loss_func(torch.nan_to_num(mdl), label)
        val_losses.append(loss.cpu().data.numpy())
    return np.mean(val_losses)
In [93]:
def plot_losses(train_losses, val_losses, best_epoch, experimentName):
    print()
    print(f'Plot Validation and Loss Values from Training')
    print(f'  Epoch with best Validation Loss:  {best_epoch:3}, {val_losses[best_epoch]:.4}')

    # Create x-axis values for epochs
    epochs = range(0, len(train_losses))

    plt.figure(figsize=(16, 9))

    # Plot the training and validation losses
    plt.plot(epochs, train_losses, 'b', label='Training Loss')
    plt.plot(epochs, val_losses, 'r', label='Validation Loss')

    # Add a vertical bar at the best_epoch
    plt.axvline(x=best_epoch, color='g', linestyle='--', label='Best Epoch')

    # Shade everything to the right of the best_epoch a light red
    plt.axvspan(best_epoch, max(epochs), facecolor='r', alpha=0.1)

    # Add labels and title
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.title(experimentName)

    # Add legend
    plt.legend(loc='upper right')

    # Save plot to disk
    plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_losses.png'))

    # Show the plot
    plt.show()
In [94]:
def eval_model(model, device, dataloader, loss_func, print_detailed: bool = False):
    model.eval()
    model = model.to(device)
    total_loss = 0
    all_predictions = []
    all_labels = []

    with torch.no_grad():
        for abp, ecg, eeg, label in tqdm(dataloader):
            batch = len(abp)
    
            abp = torch.nan_to_num(abp.reshape(batch, 1, -1)).type(torch.FloatTensor).to(device)
            ecg = torch.nan_to_num(ecg.reshape(batch, 1, -1)).type(torch.FloatTensor).to(device)
            eeg = torch.nan_to_num(eeg.reshape(batch, 1, -1)).type(torch.FloatTensor).to(device)
            label = label.type(torch.float).reshape(batch, 1).to(device)
   
            pred = model(abp, eeg, ecg)
            loss = loss_func(pred, label)
            total_loss += loss.item()

            all_predictions.append(pred.detach().cpu().numpy())
            all_labels.append(label.detach().cpu().numpy())

    # Flatten the lists
    all_predictions = np.concatenate(all_predictions).flatten()
    all_labels = np.concatenate(all_labels).flatten()

    # Calculate AUROC and AUPRC
    # y_true, y_pred
    auroc = roc_auc_score(all_labels, all_predictions)
    precision, recall, _ = precision_recall_curve(all_labels, all_predictions)
    auprc = auc(recall, precision)

    # Determine the optimal threshold, which is argmin(abs(sensitivity - specificity)) per the paper
    thresholds = np.linspace(0, 1, 101) # 0 to 1 in 0.01 steps
    min_diff = float('inf')
    optimal_sensitivity = None
    optimal_specificity = None
    optimal_threshold = None

    for threshold in thresholds:
        all_predictions_binary = (all_predictions > threshold).astype(int)

        tn, fp, fn, tp = confusion_matrix(all_labels, all_predictions_binary).ravel()
        sensitivity = tp / (tp + fn)
        specificity = tn / (tn + fp)
        diff = abs(sensitivity - specificity)

        if diff < min_diff:
            min_diff = diff
            optimal_threshold = threshold
            optimal_sensitivity = sensitivity
            optimal_specificity = specificity

    avg_loss = total_loss / len(dataloader)
    
    # accuracy
    predictions_binary = (all_predictions > optimal_threshold).astype(int)
    accuracy = np.mean(predictions_binary == all_labels)

    if print_detailed:
        print(f"Predictions: {all_predictions}")
        print(f"Labels: {all_labels}")
    print(f"Loss: {avg_loss}")
    print(f"AUROC: {auroc}")
    print(f"AUPRC: {auprc}")
    print(f"Sensitivity: {optimal_sensitivity}")
    print(f"Specificity: {optimal_specificity}")
    print(f"Threshold: {optimal_threshold}")
    print(f"Accuracy:  {accuracy}")

    return all_predictions, all_labels, avg_loss, auroc, auprc, \
        optimal_sensitivity, optimal_specificity, optimal_threshold, accuracy
In [95]:
def print_all_evals(model, models, device, val_loader, test_loader, loss_func, print_detailed: bool = False):
    print()
    print(f'Generate AUROC/AUPRC for Each Intermediate Model')
    print()
    val_aurocs = []
    val_auprcs = []
    val_accs   = []

    test_aurocs = []
    test_auprcs = []
    test_accs   = []

    for mod in models:
        model.load_state_dict(torch.load(mod))
        #model.train(False)
        model.eval()
        print(f'Intermediate Model:')
        print(f'  {mod}')
    
        # validation loop
        print("AUROC/AUPRC on Validation Data")
        all_predictions, all_labels, avg_loss, valid_auroc, valid_auprc, \
        optimal_sensitivity, optimal_specificity, optimal_threshold, valid_accuracy = \
            eval_model(model, device, val_loader, loss_func, print_detailed)

        val_aurocs.append(valid_auroc)
        val_auprcs.append(valid_auprc)
        val_accs.append(valid_accuracy)
        print()
    
        # test loop
        print("AUROC/AUPRC on Test Data")
        all_predictions, all_labels, avg_loss, test_auroc, test_auprc, \
        optimal_sensitivity, optimal_specificity, optimal_threshold, test_accuracy = \
            eval_model(model, device, test_loader, loss_func, print_detailed)

        test_aurocs.append(test_auroc)
        test_auprcs.append(test_auprc)
        test_accs.append(test_accuracy)
        print()
    
    return val_aurocs, val_auprcs, val_accs, test_aurocs, test_auprcs, test_accs
In [116]:
def plot_auroc_auprc(val_losses, val_aurocs, val_auprcs, val_accs, 
                                      test_aurocs, test_auprcs, test_accs, all_models, best_epoch, experimentName):
    print()
    print(f'Plot AUROC/AUPRC for Each Intermediate Model')
    
    # Create x-axis values for epochs
    epochs = range(0, len(val_aurocs))

    # Find model with highest AUROC
    np_test_aurocs = np.array(test_aurocs)
    test_auroc_idx = np.argmax(np_test_aurocs)
    test_accs_idx  = np.argmax(test_accs)

    print(f'  Epoch with best Validation Loss:     {best_epoch:3}, {val_losses[best_epoch]:.4}')
    print(f'  Epoch with best model Test AUROC:    {test_auroc_idx:3}, {np_test_aurocs[test_auroc_idx]:.4}')
    print(f'  Epoch with best model Test Accuracy: {test_accs_idx:3}, {test_accs[test_accs_idx]:.4}')
    #print(f'Best Model on Validation Loss:')
    #print(f'  {all_models[test_auroc_idx]}')
    #print(f'Best Model on Test AUROC:')
    #print(f'  {all_models[best_epoch]}')
    print()

    plt.figure(figsize=(16, 9))

    # Plots
    plt.plot(epochs, val_aurocs, 'C0', label='AUROC - Validation')
    plt.plot(epochs, test_aurocs, 'C1', label='AUROC - Test')

    plt.plot(epochs, val_auprcs, 'C2', label='AUPRC - Validation')
    plt.plot(epochs, test_auprcs, 'C3', label='AUPRC - Test')
    
    plt.plot(epochs, val_accs, 'C4', label='Accuracy - Validation')
    plt.plot(epochs, test_accs, 'C5', label='Accuracy - Test')

    # Add vertical bars
    plt.axvline(x=best_epoch, color='g', linestyle='--', label='Best Epoch - Validation Loss')
    plt.axvline(x=test_auroc_idx, color='maroon', linestyle='--', label='Best Epoch - Test AUROC')
    plt.axvline(x=test_accs_idx, color='violet', linestyle='--', label='Best Epoch - Test Accuracy')

    # Shade everything to the right of the best_model a light red
    plt.axvspan(test_auroc_idx, max(epochs), facecolor='r', alpha=0.1)

    # Add labels and title
    plt.xlabel('Epochs')
    plt.ylabel('AUROC / AUPRC')
    plt.title('Validation and Test AUROC and AUPRC by Model Iteration Across Training')

    # Add legend
    plt.legend(loc='right')

    # Save plot to disk
    plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_all_stats.png'))
    
    # Show the plot
    plt.show()

    return np_test_aurocs, test_auroc_idx
In [97]:
def run_experiment(
    experimentNamePrefix: str = None,
    useAbp: bool = True, 
    useEeg: bool = False, 
    useEcg: bool = False, 
    nResiduals: int = 12, 
    skip_connection: bool = False, 
    batch_size: int = 64, 
    learning_rate: float = 1e-4, 
    weight_decay: float = 0.0, 
    balance_labels: bool = False,
    pos_weight: float = None,
    max_epochs: int = 100, 
    patience: int = 25, 
    device: str = "cpu"
):
    reset_random_state()

    time_start = timer()

    experimentName = ""

    experimentOptions = [experimentNamePrefix, 'ABP', 'EEG', 'ECG', 'SKIPCONNECTION']
    experimentValues = [experimentNamePrefix is not None, useAbp, useEeg, useEcg, skip_connection]
    experimentFlags = [name for name, value in zip(experimentOptions, experimentValues) if value]
    if experimentFlags:
        experimentName = "_".join(experimentFlags)

    experimentName = f"{experimentName}_{nResiduals}_RESIDUAL_BLOCKS_{batch_size}_BATCH_SIZE_{learning_rate:.0e}_LEARNING_RATE"

    if weight_decay is not None and weight_decay != 0.0:
        experimentName = f"{experimentName}_{weight_decay:.0e}_WEIGHT_DECAY"

    predictionWindow = 'ALL' if PREDICTION_WINDOW == 'ALL' else f'{PREDICTION_WINDOW:03}'
    experimentName = f"{experimentName}_{predictionWindow}_MINS"

    maxCases = '_ALL' if MAX_CASES is None else f'{MAX_CASES:04}'
    experimentName = f"{experimentName}_{maxCases}_MAX_CASES"
    
    # Add unique uuid8 suffix to experiment name
    experimentName = f"{experimentName}_{uuid.uuid4().hex[:8]}"

    # default label split based on empirical data
    my_pos_weight = 4.0
    if balance_labels and pos_weight is not None:
        my_pos_weight = pos_weight

    # Fork stdout to file and console
    with ForkedStdout(os.path.join(VITAL_RUNS, f'{experimentName}.log')):
        print(f"Experiment Setup")
        print(f'  name:              {experimentName}')
        print(f'  prediction_window: {predictionWindow}')
        print(f'  max_cases:         {maxCases}')
        print(f'  use_abp:           {useAbp}')
        print(f'  use_eeg:           {useEeg}')
        print(f'  use_ecg:           {useEcg}')
        print(f'  n_residuals:       {nResiduals}')
        print(f'  skip_connection:   {skip_connection}')
        print(f'  batch_size:        {batch_size}')
        print(f'  learning_rate:     {learning_rate}')
        print(f'  weight_decay:      {weight_decay}')
        print(f'  balance_labels:    {balance_labels}')
        if balance_labels:
            print(f'  pos_weight:        {my_pos_weight}')
        print(f'  max_epochs:        {max_epochs}')
        print(f'  patience:          {patience}')
        print(f'  device:            {device}')
        print()

        train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
        val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=batch_size, shuffle=True)
        test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

        # Disable final sigmoid activation for BCEWithLogitsLoss
        model = HypotensionCNN(useAbp, useEeg, useEcg, device, nResiduals, skip_connection, useSigmoid=(not balance_labels))
        model = model.to(device)
    
        if balance_labels:
            # Only the weight for the positive class
            loss_func = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([my_pos_weight]).to(device))
        else:
            loss_func = nn.BCELoss()
        optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=weight_decay)

    
        print(f'Model Architecture')
        print(model)
        print()

        print(f'Training Loop')
        # Training loop
        best_epoch = 0
        train_losses = []
        val_losses = []
        best_loss = float('inf')
        no_improve_epochs = 0
        model_path = os.path.join(VITAL_MODELS, f"{experimentName}.model")

        all_models = []

        for i in range(max_epochs):
            # Train the model and get the training loss
            train_loss = train_model_one_iter(model, device, loss_func, optimizer, train_loader)
            train_losses.append(train_loss)
            # Calculate validate loss
            val_loss = evaluate_model(model, loss_func, val_loader)
            val_losses.append(val_loss)
            print(f"[{datetime.now()}] Completed epoch {i} with training loss {train_loss:.8f}, validation loss {val_loss:.8f}")

            # Save all intermediary models.
            tmp_model_path = os.path.join(VITAL_MODELS, f"{experimentName}_{i:04d}.model")
            torch.save(model.state_dict(), tmp_model_path)
            all_models.append(tmp_model_path)
  
            # Check if validation loss has improved
            if val_loss < best_loss:
                best_epoch = i
                best_loss = val_loss
                no_improve_epochs = 0
                torch.save(model.state_dict(), model_path)
                print(f"Validation loss improved to {val_loss:.8f}. Model saved.")
            else:
                no_improve_epochs += 1
                print(f"No improvement in validation loss. {no_improve_epochs} epochs without improvement.")

            # exit early if no improvement in loss over last 'patience' epochs
            if no_improve_epochs >= patience:
                print("Early stopping due to no improvement in validation loss.")
                break

        # Load best model from disk
        #print()
        #if os.path.exists(model_path):
        #    model.load_state_dict(torch.load(model_path))
        #    print(f"Loaded best model from disk from epoch {best_epoch}.")
        #else:
        #    print("No saved model found for f{experimentName}.")

        #model.train(False)

        # Plot the training and validation losses across all training epochs.
        plot_losses(train_losses, val_losses, best_epoch, experimentName)

        # Generate AUROC/AUPRC for each intermediate model generated across training epochs.
        val_aurocs, val_auprcs, val_accs, test_aurocs, test_auprcs, test_accs = \
            print_all_evals(model, all_models, device, val_loader, test_loader, loss_func, print_detailed=False)

        # Find model with highest AUROC. Plot AUROC/AUPRC across all epochs.
        np_test_aurocs, test_auroc_idx = plot_auroc_auprc(val_losses, val_aurocs, val_auprcs, val_accs, \
                                        test_aurocs, test_auprcs, test_accs, all_models, best_epoch, experimentName)

        ## AUROC / AUPRC - Model with Best Validation Loss
        best_model_val_loss = all_models[best_epoch]
    
        print(f'AUROC/AUPRC Plots - Best Model Based on Validation Loss')
        print(f'  Epoch with best Validation Loss:  {best_epoch:3}, {val_losses[best_epoch]:.4}')
        print(f'  Best Model Based on Validation Loss:')
        print(f'    {best_model_val_loss}')
        print()
        print(f'Generate Stats Based on Test Data')
        model.load_state_dict(torch.load(best_model_val_loss))
        #model.train(False)
        model.eval()
    
        best_model_val_test_predictions, best_model_val_test_labels, test_loss, \
            best_model_val_test_auroc, best_model_val_test_auprc, test_sensitivity, test_specificity, \
            best_model_val_test_threshold, best_model_val_accuracy = \
                eval_model(model, device, test_loader, loss_func, print_detailed=False)

        # y_test, y_pred
        display = RocCurveDisplay.from_predictions(
            best_model_val_test_labels,
            best_model_val_test_predictions,
            plot_chance_level=True
        )
        # Save plot to disk and show
        plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_val_auroc.png'))
        plt.show()

        print(f'best_model_val_test_auroc: {best_model_val_test_auroc}')

        best_model_val_test_predictions_binary = \
        (best_model_val_test_predictions > best_model_val_test_threshold).astype(int)

        # y_test, y_pred
        display = PrecisionRecallDisplay.from_predictions(
            best_model_val_test_labels, 
            best_model_val_test_predictions_binary,
            plot_chance_level=True
        )
        # Save plot to disk and show
        plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_val_auprc.png'))
        plt.show()

        print(f'best_model_val_test_auprc: {best_model_val_test_auprc}')
        print()

        ## AUROC / AUPRC - Model with Best AUROC
        # Find model with highest AUROC
        best_model_auroc = all_models[test_auroc_idx]

        print(f'AUROC/AUPRC Plots - Best Model Based on Model AUROC')
        print(f'  Epoch with best model Test AUROC: {test_auroc_idx:3}, {np_test_aurocs[test_auroc_idx]:.4}')
        print(f'  Best Model Based on Model AUROC:')
        print(f'    {best_model_auroc}')
        print()
        print(f'Generate Stats Based on Test Data')
        model.load_state_dict(torch.load(best_model_auroc))
        #model.train(False)
        model.eval()
    
        best_model_auroc_test_predictions, best_model_auroc_test_labels, test_loss, \
            best_model_auroc_test_auroc, best_model_auroc_test_auprc, test_sensitivity, test_specificity, \
            best_model_auroc_test_threshold, best_model_auroc_accuracy = \
                eval_model(model, device, test_loader, loss_func, print_detailed=False)

        # y_test, y_pred
        display = RocCurveDisplay.from_predictions(
            best_model_auroc_test_labels,
            best_model_auroc_test_predictions,
            plot_chance_level=True
        )
        # Save plot to disk and show
        plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_auroc_auroc.png'))
        plt.show()

        print(f'best_model_auroc_test_auroc: {best_model_auroc_test_auroc}')

        best_model_auroc_test_predictions_binary = \
            (best_model_auroc_test_predictions > best_model_auroc_test_threshold).astype(int)

        # y_test, y_pred
        display = PrecisionRecallDisplay.from_predictions(
            best_model_auroc_test_labels, 
            best_model_auroc_test_predictions_binary,
            plot_chance_level=True
        )
        # Save plot to disk and show
        plt.savefig(os.path.join(VITAL_RUNS, f'{experimentName}_auroc_auprc.png'))
        plt.show()

        print(f"best_model_auroc_test_auprc: {best_model_auroc_test_auprc}")
        print()
        
        time_delta = np.round(timer() - time_start, 3)
        print(f'Total Processing Time: {time_delta:.4f} sec')

SPLITS¶

In [98]:
print('Time to experiment!')
Time to experiment!
In [99]:
MULTI_RUN = True

ABP, EEG, and ECG Splits¶

In [100]:
RUN_ME = True

if RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           True
  use_eeg:           False
  use_ecg:           False
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (abpResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (abpFc): Linear(in_features=2814, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=32, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.93it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 09:30:04.819804] Completed epoch 0 with training loss 0.43514436, validation loss 0.41668430
Validation loss improved to 0.41668430. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.00it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
[2024-05-04 09:30:50.672807] Completed epoch 1 with training loss 0.40187803, validation loss 0.42078599
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 09:31:36.991198] Completed epoch 2 with training loss 0.40012389, validation loss 0.44391116
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.97it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 09:32:23.147747] Completed epoch 3 with training loss 0.39683139, validation loss 0.42646933
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:33:08.128277] Completed epoch 4 with training loss 0.39612669, validation loss 0.42812926
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 09:33:53.067692] Completed epoch 5 with training loss 0.39507776, validation loss 0.41308889
Validation loss improved to 0.41308889. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 09:34:37.905223] Completed epoch 6 with training loss 0.39416981, validation loss 0.41911429
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 09:35:22.715077] Completed epoch 7 with training loss 0.39305383, validation loss 0.41997433
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:36:07.619874] Completed epoch 8 with training loss 0.39494687, validation loss 0.42337504
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 09:36:52.444242] Completed epoch 9 with training loss 0.39586556, validation loss 0.41255239
Validation loss improved to 0.41255239. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:37:37.378034] Completed epoch 10 with training loss 0.39577657, validation loss 0.41800866
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:38:22.387659] Completed epoch 11 with training loss 0.39402184, validation loss 0.42512640
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:39:07.322074] Completed epoch 12 with training loss 0.39394921, validation loss 0.41355285
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
[2024-05-04 09:39:52.189715] Completed epoch 13 with training loss 0.39441675, validation loss 0.41659132
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 09:40:36.955334] Completed epoch 14 with training loss 0.39603743, validation loss 0.41525021
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.04it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 09:41:21.757941] Completed epoch 15 with training loss 0.39485961, validation loss 0.41495186
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:42:06.766105] Completed epoch 16 with training loss 0.39442125, validation loss 0.42121863
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 09:42:51.012556] Completed epoch 17 with training loss 0.39471704, validation loss 0.43838289
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:43:35.356901] Completed epoch 18 with training loss 0.39602658, validation loss 0.42454410
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:44:20.270944] Completed epoch 19 with training loss 0.39479148, validation loss 0.43122655
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:45:04.437535] Completed epoch 20 with training loss 0.39507377, validation loss 0.41206929
Validation loss improved to 0.41206929. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
[2024-05-04 09:45:48.795525] Completed epoch 21 with training loss 0.39430195, validation loss 0.42220321
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:46:33.086285] Completed epoch 22 with training loss 0.39409453, validation loss 0.41016912
Validation loss improved to 0.41016912. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.57it/s]
[2024-05-04 09:47:17.379285] Completed epoch 23 with training loss 0.39320680, validation loss 0.41491938
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 09:48:01.611642] Completed epoch 24 with training loss 0.39522654, validation loss 0.42463246
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:48:45.835055] Completed epoch 25 with training loss 0.39477357, validation loss 0.42028883
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:49:30.002012] Completed epoch 26 with training loss 0.39554808, validation loss 0.41323671
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:50:14.259885] Completed epoch 27 with training loss 0.39567468, validation loss 0.40719089
Validation loss improved to 0.40719089. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 09:50:58.449374] Completed epoch 28 with training loss 0.39385101, validation loss 0.41944361
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:51:42.631831] Completed epoch 29 with training loss 0.39369261, validation loss 0.42065114
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 09:52:26.957812] Completed epoch 30 with training loss 0.39418188, validation loss 0.40847775
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 09:53:11.180594] Completed epoch 31 with training loss 0.39526659, validation loss 0.40580460
Validation loss improved to 0.40580460. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.57it/s]
[2024-05-04 09:53:55.344950] Completed epoch 32 with training loss 0.39366660, validation loss 0.40550056
Validation loss improved to 0.40550056. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:54:39.672201] Completed epoch 33 with training loss 0.39381653, validation loss 0.40864512
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 09:55:23.796151] Completed epoch 34 with training loss 0.39369935, validation loss 0.41096520
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 09:56:08.027781] Completed epoch 35 with training loss 0.39380363, validation loss 0.40664658
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 09:56:52.295820] Completed epoch 36 with training loss 0.39470449, validation loss 0.40788791
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:57:36.542503] Completed epoch 37 with training loss 0.39426976, validation loss 0.42024857
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:58:20.876928] Completed epoch 38 with training loss 0.39324275, validation loss 0.41582194
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 09:59:05.085281] Completed epoch 39 with training loss 0.39486191, validation loss 0.44362971
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 09:59:49.269313] Completed epoch 40 with training loss 0.39359337, validation loss 0.41207263
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.08it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:00:33.293829] Completed epoch 41 with training loss 0.39336810, validation loss 0.40666768
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:01:17.442462] Completed epoch 42 with training loss 0.39352164, validation loss 0.40799636
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:02:01.658710] Completed epoch 43 with training loss 0.39295068, validation loss 0.40822035
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:02:45.933580] Completed epoch 44 with training loss 0.39475513, validation loss 0.41569167
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 10:03:30.115350] Completed epoch 45 with training loss 0.39311054, validation loss 0.40413490
Validation loss improved to 0.40413490. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 10:04:15.165610] Completed epoch 46 with training loss 0.39349264, validation loss 0.40660605
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:04:59.421227] Completed epoch 47 with training loss 0.39241630, validation loss 0.40991586
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:05:43.577345] Completed epoch 48 with training loss 0.39409500, validation loss 0.41914296
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:06:27.895254] Completed epoch 49 with training loss 0.39356631, validation loss 0.40977377
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:07:12.120991] Completed epoch 50 with training loss 0.39456728, validation loss 0.40415099
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:07:56.352065] Completed epoch 51 with training loss 0.39378518, validation loss 0.41288826
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:08:40.636153] Completed epoch 52 with training loss 0.39277041, validation loss 0.41618744
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:09:24.858789] Completed epoch 53 with training loss 0.39370370, validation loss 0.41390374
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.08it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:10:08.894569] Completed epoch 54 with training loss 0.39360073, validation loss 0.41123489
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:10:53.167560] Completed epoch 55 with training loss 0.39481926, validation loss 0.40864745
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:11:37.335162] Completed epoch 56 with training loss 0.39350757, validation loss 0.41337013
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 10:12:21.574192] Completed epoch 57 with training loss 0.39504233, validation loss 0.48009822
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:13:05.783669] Completed epoch 58 with training loss 0.39377898, validation loss 0.40654379
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:13:49.958585] Completed epoch 59 with training loss 0.39382321, validation loss 0.40892476
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:14:34.249156] Completed epoch 60 with training loss 0.39332744, validation loss 0.42497340
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:15:18.467267] Completed epoch 61 with training loss 0.39413518, validation loss 0.40364441
Validation loss improved to 0.40364441. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.05it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:16:02.956150] Completed epoch 62 with training loss 0.39500332, validation loss 0.42856115
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 10:16:47.814494] Completed epoch 63 with training loss 0.39464369, validation loss 0.41667351
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:17:31.947965] Completed epoch 64 with training loss 0.39481097, validation loss 0.40510342
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:18:16.272622] Completed epoch 65 with training loss 0.39558879, validation loss 0.41908687
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:19:00.466028] Completed epoch 66 with training loss 0.39448413, validation loss 0.41419053
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 10:19:44.690447] Completed epoch 67 with training loss 0.39338374, validation loss 0.42825273
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:20:28.855255] Completed epoch 68 with training loss 0.39408502, validation loss 0.40688327
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:21:13.131131] Completed epoch 69 with training loss 0.39414421, validation loss 0.40746877
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:21:57.472592] Completed epoch 70 with training loss 0.39383101, validation loss 0.40717492
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:22:41.703703] Completed epoch 71 with training loss 0.39455876, validation loss 0.42040324
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:23:25.847258] Completed epoch 72 with training loss 0.39455992, validation loss 0.41629809
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:24:10.054710] Completed epoch 73 with training loss 0.39572865, validation loss 0.41070578
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:24:54.253696] Completed epoch 74 with training loss 0.39423245, validation loss 0.40775201
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:25:38.420256] Completed epoch 75 with training loss 0.39515013, validation loss 0.40342787
Validation loss improved to 0.40342787. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:26:22.796442] Completed epoch 76 with training loss 0.39511293, validation loss 0.41999128
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.06it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 10:27:07.087526] Completed epoch 77 with training loss 0.39518899, validation loss 0.41476259
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:27:51.379316] Completed epoch 78 with training loss 0.39405474, validation loss 0.40725952
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.56it/s]
[2024-05-04 10:28:35.571575] Completed epoch 79 with training loss 0.39414197, validation loss 0.42200169
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.03it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
[2024-05-04 10:29:20.842906] Completed epoch 80 with training loss 0.39451519, validation loss 0.42236713
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.99it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 10:30:06.606749] Completed epoch 81 with training loss 0.39473400, validation loss 0.40862960
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.00it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:30:52.154258] Completed epoch 82 with training loss 0.39455369, validation loss 0.42538637
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.05it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 10:31:36.648682] Completed epoch 83 with training loss 0.39498681, validation loss 0.40536168
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:38<00:00,  2.07it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
[2024-05-04 10:32:21.882647] Completed epoch 84 with training loss 0.39522678, validation loss 0.40912470
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.00it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 10:33:07.448271] Completed epoch 85 with training loss 0.39509726, validation loss 0.41853914
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.00it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
[2024-05-04 10:33:53.086687] Completed epoch 86 with training loss 0.39690328, validation loss 0.41875920
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.95it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 10:34:39.893843] Completed epoch 87 with training loss 0.39697066, validation loss 0.40543804
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.95it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 10:35:26.966007] Completed epoch 88 with training loss 0.39414090, validation loss 0.43973032
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 10:36:13.027122] Completed epoch 89 with training loss 0.39568418, validation loss 0.40503675
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.96it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 10:36:59.718567] Completed epoch 90 with training loss 0.39423013, validation loss 0.41487354
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.91it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 10:37:47.592317] Completed epoch 91 with training loss 0.39475036, validation loss 0.41947433
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 10:38:33.596876] Completed epoch 92 with training loss 0.39394817, validation loss 0.41042379
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.01it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.52it/s]
[2024-05-04 10:39:18.961496] Completed epoch 93 with training loss 0.39484578, validation loss 0.41621050
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.01it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 10:40:04.931161] Completed epoch 94 with training loss 0.39534441, validation loss 0.41775441
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:39<00:00,  2.02it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 10:40:50.100923] Completed epoch 95 with training loss 0.39509165, validation loss 0.43051109
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   75, 0.4034
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:04<00:00,  2.90it/s]
Loss: 0.41723818864141193
AUROC: 0.6963569998822561
AUPRC: 0.31093148044921354
Sensitivity: 0.6771929824561403
Specificity: 0.6308724832214765
Threshold: 0.14
Accuracy:  0.6383098591549295

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4151785932481289
AUROC: 0.7310996273403811
AUPRC: 0.3437781695064106
Sensitivity: 0.7014388489208633
Specificity: 0.6455399061032864
Threshold: 0.14
Accuracy:  0.654691794267766

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4210246226617268
AUROC: 0.6982715177204757
AUPRC: 0.32400143010250526
Sensitivity: 0.6280701754385964
Specificity: 0.6791946308724832
Threshold: 0.12
Accuracy:  0.6709859154929577

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.4193843066692352
AUROC: 0.7337293545445335
AUPRC: 0.3535606695496458
Sensitivity: 0.6498800959232613
Specificity: 0.6866197183098591
Threshold: 0.12
Accuracy:  0.6806046329014527

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4438352180378778
AUROC: 0.6981372895325562
AUPRC: 0.3322430020352491
Sensitivity: 0.6807017543859649
Specificity: 0.6154362416107383
Threshold: 0.08
Accuracy:  0.6259154929577465

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.4431084867566824
AUROC: 0.7341630920615619
AUPRC: 0.35786309404960137
Sensitivity: 0.7134292565947242
Specificity: 0.6295774647887324
Threshold: 0.08
Accuracy:  0.6433058500196309

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.42694517757211414
AUROC: 0.6986836218061933
AUPRC: 0.3346133946011764
Sensitivity: 0.6701754385964912
Specificity: 0.625503355704698
Threshold: 0.1
Accuracy:  0.6326760563380281

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.54it/s]
Loss: 0.42549490593373773
AUROC: 0.7351096587518716
AUPRC: 0.35980640959949345
Sensitivity: 0.7110311750599521
Specificity: 0.637793427230047
Threshold: 0.1
Accuracy:  0.6497840596780526

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4275394082069397
AUROC: 0.69872600965501
AUPRC: 0.3368380227026778
Sensitivity: 0.656140350877193
Specificity: 0.6422818791946309
Threshold: 0.1
Accuracy:  0.6445070422535212

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.42605866566300393
AUROC: 0.7354092782112338
AUPRC: 0.3619617599998756
Sensitivity: 0.6966426858513189
Specificity: 0.652112676056338
Threshold: 0.1
Accuracy:  0.6594032194738908

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4139012949807303
AUROC: 0.6991899211115037
AUPRC: 0.33718510249692113
Sensitivity: 0.631578947368421
Specificity: 0.6731543624161074
Threshold: 0.14
Accuracy:  0.6664788732394367

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.4110303808003664
AUROC: 0.736094926875401
AUPRC: 0.36237945121630044
Sensitivity: 0.6594724220623501
Specificity: 0.6880281690140845
Threshold: 0.14
Accuracy:  0.6833529642716922

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.419337381209646
AUROC: 0.6988720122453785
AUPRC: 0.33751297814823367
Sensitivity: 0.631578947368421
Specificity: 0.6751677852348993
Threshold: 0.12
Accuracy:  0.668169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.41730986833572387
AUROC: 0.735908878530978
AUPRC: 0.3630875404411929
Sensitivity: 0.657074340527578
Specificity: 0.6906103286384977
Threshold: 0.12
Accuracy:  0.685119748723989

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4192498539175306
AUROC: 0.6988696573648887
AUPRC: 0.33794153834707424
Sensitivity: 0.624561403508772
Specificity: 0.6798657718120805
Threshold: 0.12
Accuracy:  0.6709859154929577

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4183268904685974
AUROC: 0.7361778183087333
AUPRC: 0.36405588283888374
Sensitivity: 0.6534772182254197
Specificity: 0.6976525821596244
Threshold: 0.12
Accuracy:  0.6904201020808794

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.42345842719078064
AUROC: 0.6983021311668433
AUPRC: 0.33722955246881703
Sensitivity: 0.6421052631578947
Specificity: 0.6630872483221476
Threshold: 0.11
Accuracy:  0.6597183098591549

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.42254472710192204
AUROC: 0.7352900777969175
AUPRC: 0.3632031282576994
Sensitivity: 0.6786570743405276
Specificity: 0.6774647887323944
Threshold: 0.11
Accuracy:  0.6776599921476246

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4125680774450302
AUROC: 0.6984905216060285
AUPRC: 0.33559775244876394
Sensitivity: 0.6526315789473685
Specificity: 0.6536912751677852
Threshold: 0.14
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4106356307864189
AUROC: 0.7354375654406052
AUPRC: 0.3621155504789023
Sensitivity: 0.6870503597122302
Specificity: 0.6647887323943662
Threshold: 0.14
Accuracy:  0.6684334511189635

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4186976637159075
AUROC: 0.698292711644884
AUPRC: 0.33667687406672236
Sensitivity: 0.6526315789473685
Specificity: 0.6503355704697986
Threshold: 0.12
Accuracy:  0.6507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.41725657545030115
AUROC: 0.7350947411085216
AUPRC: 0.36238802192268127
Sensitivity: 0.6918465227817746
Specificity: 0.6596244131455399
Threshold: 0.12
Accuracy:  0.6648998822143698

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4262016990355083
AUROC: 0.6980430943129636
AUPRC: 0.336033767674659
Sensitivity: 0.6666666666666666
Specificity: 0.6281879194630873
Threshold: 0.1
Accuracy:  0.6343661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.42488571256399155
AUROC: 0.7347502279866248
AUPRC: 0.361749347693369
Sensitivity: 0.6402877697841727
Specificity: 0.7091549295774648
Threshold: 0.11
Accuracy:  0.6978798586572438

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4148441127368382
AUROC: 0.6982632756387613
AUPRC: 0.3364041975349119
Sensitivity: 0.6421052631578947
Specificity: 0.6610738255033557
Threshold: 0.14
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.41258043982088566
AUROC: 0.7346933720629131
AUPRC: 0.36135386991271823
Sensitivity: 0.6750599520383693
Specificity: 0.6795774647887324
Threshold: 0.14
Accuracy:  0.6788378484491558

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4155487354312624
AUROC: 0.6982008713057811
AUPRC: 0.33813452804841615
Sensitivity: 0.6350877192982456
Specificity: 0.6677852348993288
Threshold: 0.13
Accuracy:  0.6625352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.41452820114791394
AUROC: 0.7342836998007227
AUPRC: 0.3608009711972105
Sensitivity: 0.6666666666666666
Specificity: 0.6896713615023474
Threshold: 0.13
Accuracy:  0.6859049862583432

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.41559421590396334
AUROC: 0.6981608383374543
AUPRC: 0.3382429852540775
Sensitivity: 0.6491228070175439
Specificity: 0.6563758389261745
Threshold: 0.13
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4156935431063175
AUROC: 0.7341315679850486
AUPRC: 0.36052070334816433
Sensitivity: 0.684652278177458
Specificity: 0.6683098591549296
Threshold: 0.13
Accuracy:  0.6709854731056144

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.4157654983656747
AUROC: 0.697922995407983
AUPRC: 0.33995456378754896
Sensitivity: 0.6350877192982456
Specificity: 0.6664429530201342
Threshold: 0.13
Accuracy:  0.6614084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.41505490727722644
AUROC: 0.7336815054998255
AUPRC: 0.36079861160923204
Sensitivity: 0.6666666666666666
Specificity: 0.6894366197183098
Threshold: 0.13
Accuracy:  0.6857086768747546

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4209630489349365
AUROC: 0.6975838926174496
AUPRC: 0.34235947040396225
Sensitivity: 0.6596491228070176
Specificity: 0.6476510067114094
Threshold: 0.11
Accuracy:  0.6495774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.421341572701931
AUROC: 0.733260715371365
AUPRC: 0.3606642949850805
Sensitivity: 0.6942446043165468
Specificity: 0.6544600938967137
Threshold: 0.11
Accuracy:  0.6609736945425991

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.43741550190108164
AUROC: 0.6970246085011187
AUPRC: 0.3418530363529849
Sensitivity: 0.631578947368421
Specificity: 0.6671140939597315
Threshold: 0.09
Accuracy:  0.6614084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4394695281982422
AUROC: 0.7320996723747762
AUPRC: 0.3593031288418948
Sensitivity: 0.6654676258992805
Specificity: 0.6845070422535211
Threshold: 0.09
Accuracy:  0.6813898704358068

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4239757444177355
AUROC: 0.6973107264806312
AUPRC: 0.34156457095449433
Sensitivity: 0.6385964912280702
Specificity: 0.6624161073825503
Threshold: 0.11
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4249271102249622
AUROC: 0.7322778397000709
AUPRC: 0.35928428602219153
Sensitivity: 0.6690647482014388
Specificity: 0.6769953051643193
Threshold: 0.11
Accuracy:  0.6756968983117393

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.43011744746140074
AUROC: 0.6969339456022606
AUPRC: 0.341233259404634
Sensitivity: 0.6175438596491228
Specificity: 0.6724832214765101
Threshold: 0.1
Accuracy:  0.663661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.43205818720161915
AUROC: 0.731603590367143
AUPRC: 0.3586829688463591
Sensitivity: 0.6534772182254197
Specificity: 0.6948356807511737
Threshold: 0.1
Accuracy:  0.688064389477817

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.41095458822590963
AUROC: 0.6978452843518191
AUPRC: 0.33680418291287023
Sensitivity: 0.6736842105263158
Specificity: 0.6140939597315436
Threshold: 0.14
Accuracy:  0.6236619718309859

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4118303246796131
AUROC: 0.7325595861339099
AUPRC: 0.3591500016939404
Sensitivity: 0.6522781774580336
Specificity: 0.6992957746478873
Threshold: 0.15
Accuracy:  0.6915979583824107

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.42112702982766287
AUROC: 0.6973955021782644
AUPRC: 0.33542905023396496
Sensitivity: 0.6631578947368421
Specificity: 0.6348993288590604
Threshold: 0.11
Accuracy:  0.6394366197183099

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.42213898040354253
AUROC: 0.7317954087434277
AUPRC: 0.35843465605769015
Sensitivity: 0.7014388489208633
Specificity: 0.6490610328638498
Threshold: 0.11
Accuracy:  0.6576364350215941

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4124141378062112
AUROC: 0.6982126457082303
AUPRC: 0.3354227484015321
Sensitivity: 0.6421052631578947
Specificity: 0.6570469798657718
Threshold: 0.14
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.40987005792558195
AUROC: 0.7325083595095755
AUPRC: 0.3581270455432354
Sensitivity: 0.6822541966426858
Specificity: 0.6694835680751173
Threshold: 0.14
Accuracy:  0.67157440125638

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.414842073406492
AUROC: 0.6975509242905922
AUPRC: 0.3346262271101788
Sensitivity: 0.6491228070175439
Specificity: 0.6604026845637584
Threshold: 0.13
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.41402968764305115
AUROC: 0.7314922709719548
AUPRC: 0.3571164575718055
Sensitivity: 0.6678657074340527
Specificity: 0.6755868544600939
Threshold: 0.13
Accuracy:  0.6743227326266196

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.42537372027124676
AUROC: 0.6965312610385023
AUPRC: 0.32969899179798307
Sensitivity: 0.656140350877193
Specificity: 0.6516778523489933
Threshold: 0.11
Accuracy:  0.652394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.425010884553194
AUROC: 0.7304953220522173
AUPRC: 0.35526773785546617
Sensitivity: 0.6714628297362111
Specificity: 0.6645539906103286
Threshold: 0.11
Accuracy:  0.665685119748724

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.421525701880455
AUROC: 0.6965030024726245
AUPRC: 0.3314691820268454
Sensitivity: 0.6631578947368421
Specificity: 0.6429530201342282
Threshold: 0.12
Accuracy:  0.6461971830985915

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.42099730409681796
AUROC: 0.7306406987086387
AUPRC: 0.35625939239049587
Sensitivity: 0.6738609112709832
Specificity: 0.6593896713615024
Threshold: 0.12
Accuracy:  0.6617589320769532

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4131646454334259
AUROC: 0.6978005416225126
AUPRC: 0.33521064808297263
Sensitivity: 0.6385964912280702
Specificity: 0.6624161073825503
Threshold: 0.12
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.4119619868695736
AUROC: 0.7315682665135498
AUPRC: 0.35646764771629547
Sensitivity: 0.6642685851318945
Specificity: 0.6788732394366197
Threshold: 0.12
Accuracy:  0.6764821358460934

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.40774833943162647
AUROC: 0.6990980807724008
AUPRC: 0.33492334902461407
Sensitivity: 0.6385964912280702
Specificity: 0.6577181208053692
Threshold: 0.16
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.40557032376527785
AUROC: 0.7330715709122843
AUPRC: 0.35905154177688375
Sensitivity: 0.6750599520383693
Specificity: 0.6732394366197183
Threshold: 0.16
Accuracy:  0.6735374950922655

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4203046475137983
AUROC: 0.6985423289768043
AUPRC: 0.33595274727731256
Sensitivity: 0.6526315789473685
Specificity: 0.6570469798657718
Threshold: 0.11
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.41it/s]
Loss: 0.41768021434545516
AUROC: 0.7328804561984216
AUPRC: 0.359214154857897
Sensitivity: 0.6750599520383693
Specificity: 0.6715962441314554
Threshold: 0.11
Accuracy:  0.6721633294071456

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.41946479039532797
AUROC: 0.6979512539738609
AUPRC: 0.33388668323019133
Sensitivity: 0.6596491228070176
Specificity: 0.6463087248322148
Threshold: 0.11
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.4188382927328348
AUROC: 0.7320847547314262
AUPRC: 0.3566773843957623
Sensitivity: 0.684652278177458
Specificity: 0.6610328638497652
Threshold: 0.11
Accuracy:  0.6648998822143698

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4078337039266314
AUROC: 0.6991663723066054
AUPRC: 0.33873537427092254
Sensitivity: 0.6701754385964912
Specificity: 0.6355704697986577
Threshold: 0.18
Accuracy:  0.6411267605633802

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.40312894210219385
AUROC: 0.734373064928339
AUPRC: 0.3619017063662697
Sensitivity: 0.6594724220623501
Specificity: 0.6950704225352112
Threshold: 0.19
Accuracy:  0.6892422457793482

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4042027166911534
AUROC: 0.698676557164724
AUPRC: 0.3346305098103797
Sensitivity: 0.6456140350877193
Specificity: 0.6590604026845638
Threshold: 0.17
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.3987231221050024
AUROC: 0.7356955280845745
AUPRC: 0.36336433882703556
Sensitivity: 0.6834532374100719
Specificity: 0.672300469483568
Threshold: 0.17
Accuracy:  0.6741264232430311

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4054830457483019
AUROC: 0.6996844460143647
AUPRC: 0.3325445094959984
Sensitivity: 0.6596491228070176
Specificity: 0.6382550335570469
Threshold: 0.16
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4007171381264925
AUROC: 0.7359943031490301
AUPRC: 0.3622245572868
Sensitivity: 0.6918465227817746
Specificity: 0.6544600938967137
Threshold: 0.16
Accuracy:  0.660581075775422

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.40847090099539074
AUROC: 0.6991357588602378
AUPRC: 0.335157474579744
Sensitivity: 0.6350877192982456
Specificity: 0.6677852348993288
Threshold: 0.15
Accuracy:  0.6625352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4061265893280506
AUROC: 0.7337797367739611
AUPRC: 0.35996391341772627
Sensitivity: 0.6618705035971223
Specificity: 0.6884976525821597
Threshold: 0.15
Accuracy:  0.6841382018060463

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.41207410182271687
AUROC: 0.6989826916283999
AUPRC: 0.34114647702429346
Sensitivity: 0.656140350877193
Specificity: 0.6543624161073825
Threshold: 0.13
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.40870179496705533
AUROC: 0.7338964040035577
AUPRC: 0.36078305145435413
Sensitivity: 0.6810551558752997
Specificity: 0.6645539906103286
Threshold: 0.13
Accuracy:  0.6672555948174322

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4077272564172745
AUROC: 0.6986482985988461
AUPRC: 0.3319100943753302
Sensitivity: 0.6596491228070176
Specificity: 0.6382550335570469
Threshold: 0.16
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.4033641591668129
AUROC: 0.7333020907217888
AUPRC: 0.36103308203243906
Sensitivity: 0.6954436450839329
Specificity: 0.647887323943662
Threshold: 0.16
Accuracy:  0.6556733411857086

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.40710061362811495
AUROC: 0.6993347462616271
AUPRC: 0.3360191523069458
Sensitivity: 0.6526315789473685
Specificity: 0.6543624161073825
Threshold: 0.14
Accuracy:  0.6540845070422535

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.40327301286160944
AUROC: 0.7336653212641155
AUPRC: 0.36111558105127844
Sensitivity: 0.6726618705035972
Specificity: 0.6650234741784038
Threshold: 0.14
Accuracy:  0.6662740478994896

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4207336796181543
AUROC: 0.6973766631343459
AUPRC: 0.3353589260001225
Sensitivity: 0.6385964912280702
Specificity: 0.6624161073825503
Threshold: 0.11
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.41914464980363847
AUROC: 0.7313191700160999
AUPRC: 0.3575885140442906
Sensitivity: 0.6558752997601919
Specificity: 0.67981220657277
Threshold: 0.11
Accuracy:  0.6758932076953278

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.41698205045291353
AUROC: 0.7001200989049806
AUPRC: 0.3364433548917247
Sensitivity: 0.656140350877193
Specificity: 0.6469798657718121
Threshold: 0.12
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4117552597075701
AUROC: 0.7360223089134326
AUPRC: 0.36303483133588604
Sensitivity: 0.6870503597122302
Specificity: 0.6603286384976526
Threshold: 0.12
Accuracy:  0.6647035728307813

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4443376234599522
AUROC: 0.6950877192982456
AUPRC: 0.3215955693963937
Sensitivity: 0.6456140350877193
Specificity: 0.6496644295302013
Threshold: 0.09
Accuracy:  0.6490140845070422

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4431289654225111
AUROC: 0.7307000878170703
AUPRC: 0.3510574956994387
Sensitivity: 0.6606714628297362
Specificity: 0.67018779342723
Threshold: 0.09
Accuracy:  0.6686297605025521

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4113124545131411
AUROC: 0.7000141292829389
AUPRC: 0.33774932216561926
Sensitivity: 0.6491228070175439
Specificity: 0.6523489932885906
Threshold: 0.13
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4100466176867485
AUROC: 0.7336753132705104
AUPRC: 0.36061854427861756
Sensitivity: 0.6726618705035972
Specificity: 0.6626760563380282
Threshold: 0.13
Accuracy:  0.6643109540636042

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
Loss: 0.40619006540094105
AUROC: 0.6989497233015425
AUPRC: 0.3321914776538206
Sensitivity: 0.656140350877193
Specificity: 0.6463087248322148
Threshold: 0.16
Accuracy:  0.647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.40294694863259795
AUROC: 0.733790713907747
AUPRC: 0.3607853083872286
Sensitivity: 0.6822541966426858
Specificity: 0.6565727699530517
Threshold: 0.16
Accuracy:  0.6607773851590106

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.40742072463035583
AUROC: 0.7003155539856352
AUPRC: 0.33805437046345216
Sensitivity: 0.624561403508772
Specificity: 0.6731543624161074
Threshold: 0.14
Accuracy:  0.6653521126760563

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4048974823206663
AUROC: 0.7356737145494872
AUPRC: 0.36255970410958194
Sensitivity: 0.6666666666666666
Specificity: 0.6823943661971831
Threshold: 0.14
Accuracy:  0.6798193953670986

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4087270711149488
AUROC: 0.6998422230071824
AUPRC: 0.33541090729175327
Sensitivity: 0.6350877192982456
Specificity: 0.6624161073825503
Threshold: 0.14
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.54it/s]
Loss: 0.4024619199335575
AUROC: 0.7373354837256956
AUPRC: 0.36336600482904013
Sensitivity: 0.6714628297362111
Specificity: 0.673943661971831
Threshold: 0.14
Accuracy:  0.6735374950922655

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4153516931193216
AUROC: 0.6999929353585306
AUPRC: 0.3308121521512087
Sensitivity: 0.6526315789473685
Specificity: 0.6516778523489933
Threshold: 0.21
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.50it/s]
Loss: 0.40473668538033963
AUROC: 0.7386820121367694
AUPRC: 0.36212400501852005
Sensitivity: 0.6762589928057554
Specificity: 0.6626760563380282
Threshold: 0.21
Accuracy:  0.6648998822143698

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0045.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.40519979170390535
AUROC: 0.6995973154362417
AUPRC: 0.3316823412139992
Sensitivity: 0.6596491228070176
Specificity: 0.6449664429530201
Threshold: 0.16
Accuracy:  0.6473239436619719

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.3965837199240923
AUROC: 0.7379082649373458
AUPRC: 0.3637519246780964
Sensitivity: 0.6894484412470024
Specificity: 0.6575117370892019
Threshold: 0.16
Accuracy:  0.662740478994896

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0046.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4068810726915087
AUROC: 0.7002661014953491
AUPRC: 0.33957192441424755
Sensitivity: 0.6596491228070176
Specificity: 0.6382550335570469
Threshold: 0.13
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.40156786032021047
AUROC: 0.737202632260389
AUPRC: 0.3637451016342106
Sensitivity: 0.6930455635491607
Specificity: 0.6530516431924883
Threshold: 0.13
Accuracy:  0.6595995288574794

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0047.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.40928961655923296
AUROC: 0.6990203697162369
AUPRC: 0.33496191946622267
Sensitivity: 0.6280701754385964
Specificity: 0.6711409395973155
Threshold: 0.14
Accuracy:  0.6642253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4059934701770544
AUROC: 0.7340949775390955
AUPRC: 0.3612973382205154
Sensitivity: 0.6546762589928058
Specificity: 0.6903755868544601
Threshold: 0.14
Accuracy:  0.6845308205732235

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0048.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4194626041821071
AUROC: 0.6982102908277404
AUPRC: 0.34435434034869106
Sensitivity: 0.6385964912280702
Specificity: 0.6630872483221476
Threshold: 0.11
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.41688162125647066
AUROC: 0.7318874477882482
AUPRC: 0.35998453216058346
Sensitivity: 0.6558752997601919
Specificity: 0.676056338028169
Threshold: 0.11
Accuracy:  0.6727522575579112

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0049.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4089159050158092
AUROC: 0.6977864123395737
AUPRC: 0.33926741281778117
Sensitivity: 0.6385964912280702
Specificity: 0.6610738255033557
Threshold: 0.14
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.53it/s]
Loss: 0.40378342382609844
AUROC: 0.7323117562288198
AUPRC: 0.36250998524011013
Sensitivity: 0.6642685851318945
Specificity: 0.6774647887323944
Threshold: 0.14
Accuracy:  0.6753042795445622

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0050.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.40432944893836975
AUROC: 0.6997998351583656
AUPRC: 0.3283780953352788
Sensitivity: 0.6666666666666666
Specificity: 0.6389261744966444
Threshold: 0.15
Accuracy:  0.6433802816901408

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.3989260416477919
AUROC: 0.7373938877067361
AUPRC: 0.3594636032434076
Sensitivity: 0.6954436450839329
Specificity: 0.6532863849765258
Threshold: 0.15
Accuracy:  0.660188457008245

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0051.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4118511357477733
AUROC: 0.6997762863534676
AUPRC: 0.3294483624758691
Sensitivity: 0.656140350877193
Specificity: 0.6550335570469799
Threshold: 0.2
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.50it/s]
Loss: 0.39924327917397023
AUROC: 0.7376146969748145
AUPRC: 0.3626880314505065
Sensitivity: 0.6750599520383693
Specificity: 0.6661971830985915
Threshold: 0.2
Accuracy:  0.6676482135846094

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0052.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.41590150339262827
AUROC: 0.6981584834569645
AUPRC: 0.33396082914554515
Sensitivity: 0.6631578947368421
Specificity: 0.6409395973154363
Threshold: 0.13
Accuracy:  0.6445070422535212

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4159349612891674
AUROC: 0.7316362403035318
AUPRC: 0.35586384302818674
Sensitivity: 0.6786570743405276
Specificity: 0.6568075117370892
Threshold: 0.13
Accuracy:  0.6603847663918335

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0053.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4133226935352598
AUROC: 0.6969833980925467
AUPRC: 0.3330416236718635
Sensitivity: 0.6350877192982456
Specificity: 0.6570469798657718
Threshold: 0.13
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4098300486803055
AUROC: 0.7307898751421398
AUPRC: 0.3580598984074141
Sensitivity: 0.6522781774580336
Specificity: 0.6758215962441314
Threshold: 0.13
Accuracy:  0.6719670200235571

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0054.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.41173229685851503
AUROC: 0.6970257859413634
AUPRC: 0.3288982588942141
Sensitivity: 0.6736842105263158
Specificity: 0.6315436241610738
Threshold: 0.14
Accuracy:  0.6383098591549295

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4112096171826124
AUROC: 0.7328776415487328
AUPRC: 0.35927174868673106
Sensitivity: 0.6882494004796164
Specificity: 0.65
Threshold: 0.14
Accuracy:  0.6562622693364742

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0055.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4094295395272119
AUROC: 0.6998163193217946
AUPRC: 0.3324254378802177
Sensitivity: 0.6491228070175439
Specificity: 0.6610738255033557
Threshold: 0.12
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.40482803210616114
AUROC: 0.7364899629592101
AUPRC: 0.36284433615882383
Sensitivity: 0.6774580335731415
Specificity: 0.6779342723004694
Threshold: 0.12
Accuracy:  0.6778563015312132

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0056.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.41223178591047016
AUROC: 0.6970093017779347
AUPRC: 0.33874663011853406
Sensitivity: 0.6701754385964912
Specificity: 0.6389261744966444
Threshold: 0.13
Accuracy:  0.643943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.40894097536802293
AUROC: 0.7306523795048467
AUPRC: 0.3584126923238208
Sensitivity: 0.6810551558752997
Specificity: 0.653755868544601
Threshold: 0.13
Accuracy:  0.6582253631723597

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0057.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.4804680986063821
AUROC: 0.6990392087601555
AUPRC: 0.3164840686825771
Sensitivity: 0.6491228070175439
Specificity: 0.640268456375839
Threshold: 0.34
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4649060472846031
AUROC: 0.7351938167775638
AUPRC: 0.3511038143209807
Sensitivity: 0.6666666666666666
Specificity: 0.672300469483568
Threshold: 0.35000000000000003
Accuracy:  0.6713780918727915

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0058.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4073271857840674
AUROC: 0.6997009301777934
AUPRC: 0.3276570004947704
Sensitivity: 0.6596491228070176
Specificity: 0.6496644295302013
Threshold: 0.15
Accuracy:  0.6512676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4024418376386166
AUROC: 0.7375707884396708
AUPRC: 0.3621107385166514
Sensitivity: 0.6810551558752997
Specificity: 0.6652582159624413
Threshold: 0.15
Accuracy:  0.6678445229681979

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0059.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.408754757472447
AUROC: 0.6993806664311788
AUPRC: 0.3365317940190596
Sensitivity: 0.6596491228070176
Specificity: 0.6449664429530201
Threshold: 0.14
Accuracy:  0.6473239436619719

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4065094985067844
AUROC: 0.7347896330822666
AUPRC: 0.3621746492014909
Sensitivity: 0.6906474820143885
Specificity: 0.6561032863849765
Threshold: 0.14
Accuracy:  0.6617589320769532

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0060.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4246619535343988
AUROC: 0.6934322383139055
AUPRC: 0.32491418305787356
Sensitivity: 0.6140350877192983
Specificity: 0.6718120805369128
Threshold: 0.13
Accuracy:  0.6625352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.42234727926552296
AUROC: 0.7282732968554734
AUPRC: 0.34986528525437244
Sensitivity: 0.6282973621103117
Specificity: 0.6946009389671362
Threshold: 0.13
Accuracy:  0.6837455830388692

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0061.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4042980968952179
AUROC: 0.6994701518897917
AUPRC: 0.34177224738104695
Sensitivity: 0.6596491228070176
Specificity: 0.640268456375839
Threshold: 0.15
Accuracy:  0.6433802816901408

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.3991754923015833
AUROC: 0.7358804505691221
AUPRC: 0.3640163673141585
Sensitivity: 0.6522781774580336
Specificity: 0.6997652582159625
Threshold: 0.16
Accuracy:  0.6919905771495878

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0062.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.42953935478414806
AUROC: 0.6956976333451077
AUPRC: 0.31477531769691675
Sensitivity: 0.6385964912280702
Specificity: 0.6543624161073825
Threshold: 0.12
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.42771981135010717
AUROC: 0.7315454678510713
AUPRC: 0.35228182078826087
Sensitivity: 0.6666666666666666
Specificity: 0.6708920187793427
Threshold: 0.12
Accuracy:  0.6702002355712603

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0063.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4182666518858501
AUROC: 0.6982361945131286
AUPRC: 0.33050411514064837
Sensitivity: 0.656140350877193
Specificity: 0.6315436241610738
Threshold: 0.11
Accuracy:  0.6354929577464788

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.41411297358572485
AUROC: 0.7332404498936063
AUPRC: 0.3618422342597088
Sensitivity: 0.6870503597122302
Specificity: 0.647887323943662
Threshold: 0.11
Accuracy:  0.6542991755005889

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0064.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.4056923048836844
AUROC: 0.699809254680325
AUPRC: 0.33276811385808497
Sensitivity: 0.6596491228070176
Specificity: 0.6335570469798658
Threshold: 0.13
Accuracy:  0.6377464788732394

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.40107423104345796
AUROC: 0.7379479514979566
AUPRC: 0.3636082677930122
Sensitivity: 0.6990407673860911
Specificity: 0.6453051643192488
Threshold: 0.13
Accuracy:  0.6541028661170004

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0065.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.41981303691864014
AUROC: 0.7000117744024492
AUPRC: 0.3319744160269598
Sensitivity: 0.6526315789473685
Specificity: 0.6550335570469799
Threshold: 0.23
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.4101784750819206
AUROC: 0.7375958388219002
AUPRC: 0.36261497163015466
Sensitivity: 0.6714628297362111
Specificity: 0.67018779342723
Threshold: 0.23
Accuracy:  0.6703965449548488

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0066.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.41417997223990305
AUROC: 0.6988884964088073
AUPRC: 0.32066046686082245
Sensitivity: 0.6491228070175439
Specificity: 0.6503355704697986
Threshold: 0.2
Accuracy:  0.6501408450704226

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4033064141869545
AUROC: 0.7377809020389323
AUPRC: 0.35883158405130794
Sensitivity: 0.6738609112709832
Specificity: 0.6636150234741784
Threshold: 0.2
Accuracy:  0.6652925009815469

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0067.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.43001493385859896
AUROC: 0.6952808194984104
AUPRC: 0.3254424973239784
Sensitivity: 0.6631578947368421
Specificity: 0.6422818791946309
Threshold: 0.11
Accuracy:  0.6456338028169014

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4273921176791191
AUROC: 0.7289545828126232
AUPRC: 0.35218485616727646
Sensitivity: 0.6726618705035972
Specificity: 0.6600938967136151
Threshold: 0.11
Accuracy:  0.6621515508441304

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0068.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.4071413299867085
AUROC: 0.6999905804780409
AUPRC: 0.3246437376217484
Sensitivity: 0.6491228070175439
Specificity: 0.6644295302013423
Threshold: 0.17
Accuracy:  0.6619718309859155

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.39476137682795526
AUROC: 0.738689611690929
AUPRC: 0.36127186806640554
Sensitivity: 0.6642685851318945
Specificity: 0.6755868544600939
Threshold: 0.17
Accuracy:  0.673733804475854

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0069.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.4073622652462551
AUROC: 0.6996773813728953
AUPRC: 0.33354557669672086
Sensitivity: 0.6631578947368421
Specificity: 0.6416107382550336
Threshold: 0.16
Accuracy:  0.6450704225352113

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.3941403366625309
AUROC: 0.7381173934092163
AUPRC: 0.36428662143502955
Sensitivity: 0.658273381294964
Specificity: 0.6873239436619718
Threshold: 0.17
Accuracy:  0.682567726737338

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0070.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4075137845107487
AUROC: 0.6979065112445544
AUPRC: 0.33102131109319005
Sensitivity: 0.656140350877193
Specificity: 0.640268456375839
Threshold: 0.15
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.40598915666341784
AUROC: 0.7335492169644565
AUPRC: 0.3621094047145884
Sensitivity: 0.6810551558752997
Specificity: 0.6586854460093897
Threshold: 0.15
Accuracy:  0.6623478602277189

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0071.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4202709836619241
AUROC: 0.6957753444012715
AUPRC: 0.3398828597812512
Sensitivity: 0.6701754385964912
Specificity: 0.62751677852349
Threshold: 0.12
Accuracy:  0.6343661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.4179737973958254
AUROC: 0.7292322480044133
AUPRC: 0.3553216903662552
Sensitivity: 0.6894484412470024
Specificity: 0.6469483568075117
Threshold: 0.12
Accuracy:  0.6539065567334118

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0072.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.4160864119018827
AUROC: 0.6950029436006123
AUPRC: 0.32807135250485964
Sensitivity: 0.6350877192982456
Specificity: 0.6590604026845638
Threshold: 0.14
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.4143777124583721
AUROC: 0.7283473221422863
AUPRC: 0.3502507727076748
Sensitivity: 0.6462829736211031
Specificity: 0.6793427230046948
Threshold: 0.14
Accuracy:  0.6739301138594425

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0073.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4102193777050291
AUROC: 0.6964088072530319
AUPRC: 0.326836218131267
Sensitivity: 0.6596491228070176
Specificity: 0.6442953020134228
Threshold: 0.15
Accuracy:  0.6467605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.4093773301690817
AUROC: 0.7319609101451232
AUPRC: 0.3587882358532922
Sensitivity: 0.6726618705035972
Specificity: 0.6591549295774648
Threshold: 0.15
Accuracy:  0.6613663133097762

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0074.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.4077610267060144
AUROC: 0.7004003296832686
AUPRC: 0.33674333043059784
Sensitivity: 0.6596491228070176
Specificity: 0.6449664429530201
Threshold: 0.12
Accuracy:  0.6473239436619719

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4025578606873751
AUROC: 0.7354788000585446
AUPRC: 0.3636588696495364
Sensitivity: 0.6798561151079137
Specificity: 0.6615023474178404
Threshold: 0.12
Accuracy:  0.6645072634471928

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0075.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4040251097508839
AUROC: 0.6996090898386907
AUPRC: 0.33350793854407285
Sensitivity: 0.6350877192982456
Specificity: 0.6691275167785234
Threshold: 0.14
Accuracy:  0.663661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.4017699170857668
AUROC: 0.7350525213631911
AUPRC: 0.36291489427329615
Sensitivity: 0.6534772182254197
Specificity: 0.6929577464788732
Threshold: 0.14
Accuracy:  0.6864939144091088

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0076.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.41884476797921316
AUROC: 0.6952643353349819
AUPRC: 0.32447535480556833
Sensitivity: 0.6140350877192983
Specificity: 0.6684563758389261
Threshold: 0.14
Accuracy:  0.6597183098591549

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.41939511671662333
AUROC: 0.7281766136386665
AUPRC: 0.3480265417871612
Sensitivity: 0.6342925659472423
Specificity: 0.6870892018779343
Threshold: 0.14
Accuracy:  0.6784452296819788

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0077.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.41324119695595335
AUROC: 0.6963522901212764
AUPRC: 0.33460112963430455
Sensitivity: 0.6526315789473685
Specificity: 0.6523489932885906
Threshold: 0.14
Accuracy:  0.652394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.41354899741709233
AUROC: 0.7299197261908784
AUPRC: 0.3540952000533601
Sensitivity: 0.6606714628297362
Specificity: 0.6687793427230047
Threshold: 0.14
Accuracy:  0.6674519042010209

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0078.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.40729445219039917
AUROC: 0.6986412339573767
AUPRC: 0.3348669536215937
Sensitivity: 0.6631578947368421
Specificity: 0.640268456375839
Threshold: 0.13
Accuracy:  0.643943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.40397739931941035
AUROC: 0.7337977505319687
AUPRC: 0.3628505034937128
Sensitivity: 0.6882494004796164
Specificity: 0.6514084507042254
Threshold: 0.13
Accuracy:  0.6574401256380055

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0079.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.42343235441616606
AUROC: 0.696319321794419
AUPRC: 0.32672410734018553
Sensitivity: 0.6350877192982456
Specificity: 0.6550335570469799
Threshold: 0.12
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.50it/s]
Loss: 0.41917090564966203
AUROC: 0.7309774715438917
AUPRC: 0.35786831526635066
Sensitivity: 0.6690647482014388
Specificity: 0.6706572769953052
Threshold: 0.12
Accuracy:  0.6703965449548488

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0080.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.421540447643825
AUROC: 0.6961403508771932
AUPRC: 0.3327812053014627
Sensitivity: 0.6631578947368421
Specificity: 0.6395973154362417
Threshold: 0.12
Accuracy:  0.6433802816901408

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4247601695358753
AUROC: 0.7302259600770088
AUPRC: 0.35373348905234575
Sensitivity: 0.670263788968825
Specificity: 0.6598591549295775
Threshold: 0.12
Accuracy:  0.6615626226933647

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0081.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.409187267933573
AUROC: 0.6999764511951019
AUPRC: 0.335732358236874
Sensitivity: 0.6526315789473685
Specificity: 0.6382550335570469
Threshold: 0.14
Accuracy:  0.6405633802816901

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.408427731692791
AUROC: 0.7356027853773319
AUPRC: 0.36245170941359334
Sensitivity: 0.6894484412470024
Specificity: 0.6471830985915493
Threshold: 0.14
Accuracy:  0.6541028661170004

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0082.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4246841860669
AUROC: 0.6997268338631815
AUPRC: 0.32555176875129166
Sensitivity: 0.6526315789473685
Specificity: 0.6409395973154363
Threshold: 0.24
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.41320414617657664
AUROC: 0.737251184967519
AUPRC: 0.35998824879184926
Sensitivity: 0.6642685851318945
Specificity: 0.6746478873239437
Threshold: 0.25
Accuracy:  0.6729485669414998

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0083.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.40579281960214886
AUROC: 0.6967738137289532
AUPRC: 0.32879248734099
Sensitivity: 0.6701754385964912
Specificity: 0.6201342281879194
Threshold: 0.15
Accuracy:  0.6281690140845071

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4013967253267765
AUROC: 0.7335579423784915
AUPRC: 0.3640282400352567
Sensitivity: 0.7074340527577938
Specificity: 0.637793427230047
Threshold: 0.15
Accuracy:  0.649195131527287

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0084.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.4088307533945356
AUROC: 0.6971364653243848
AUPRC: 0.3306769622510769
Sensitivity: 0.6210526315789474
Specificity: 0.6684563758389261
Threshold: 0.13
Accuracy:  0.6608450704225353

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.4077195145189762
AUROC: 0.733956637506896
AUPRC: 0.3616682678103364
Sensitivity: 0.658273381294964
Specificity: 0.6906103286384977
Threshold: 0.13
Accuracy:  0.6853160581075776

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0085.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4174207406384604
AUROC: 0.6965430354409514
AUPRC: 0.32984941185926187
Sensitivity: 0.6666666666666666
Specificity: 0.6416107382550336
Threshold: 0.14
Accuracy:  0.6456338028169014

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4187918893992901
AUROC: 0.7306611049188818
AUPRC: 0.35441138339470923
Sensitivity: 0.6786570743405276
Specificity: 0.6586854460093897
Threshold: 0.14
Accuracy:  0.6619552414605419

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0086.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.4182431080511638
AUROC: 0.6956670198987401
AUPRC: 0.32913505232873613
Sensitivity: 0.6807017543859649
Specificity: 0.6033557046979866
Threshold: 0.18
Accuracy:  0.615774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.50it/s]
Loss: 0.41946993172168734
AUROC: 0.7295960414766778
AUPRC: 0.3546394496149661
Sensitivity: 0.7206235011990407
Specificity: 0.6267605633802817
Threshold: 0.18
Accuracy:  0.6421279937180997

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0087.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.4047556604657854
AUROC: 0.6975933121394089
AUPRC: 0.3294370692283982
Sensitivity: 0.6526315789473685
Specificity: 0.6422818791946309
Threshold: 0.16
Accuracy:  0.643943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.39917291030287744
AUROC: 0.7361648709201654
AUPRC: 0.3630178390313663
Sensitivity: 0.684652278177458
Specificity: 0.6612676056338028
Threshold: 0.16
Accuracy:  0.6650961915979584

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0088.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4405638873577118
AUROC: 0.6975085364417756
AUPRC: 0.3322637669405357
Sensitivity: 0.631578947368421
Specificity: 0.6570469798657718
Threshold: 0.1
Accuracy:  0.6529577464788733

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.4387495335191488
AUROC: 0.7314545546661263
AUPRC: 0.3599348289216725
Sensitivity: 0.657074340527578
Specificity: 0.6807511737089202
Threshold: 0.1
Accuracy:  0.6768747546132705

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0089.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.4041570850781032
AUROC: 0.6995101848581186
AUPRC: 0.3334128072358269
Sensitivity: 0.6526315789473685
Specificity: 0.6510067114093959
Threshold: 0.16
Accuracy:  0.6512676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.39589923098683355
AUROC: 0.7362856193918105
AUPRC: 0.36432928005620197
Sensitivity: 0.6798561151079137
Specificity: 0.6664319248826291
Threshold: 0.16
Accuracy:  0.6686297605025521

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0090.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.4157809955733163
AUROC: 0.6967573295655244
AUPRC: 0.32972290473110427
Sensitivity: 0.6421052631578947
Specificity: 0.6597315436241611
Threshold: 0.13
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.41161171421408654
AUROC: 0.7324334898278559
AUPRC: 0.3623451135788554
Sensitivity: 0.6690647482014388
Specificity: 0.676056338028169
Threshold: 0.13
Accuracy:  0.6749116607773852

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0091.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.41989523810999735
AUROC: 0.696752619804545
AUPRC: 0.32645669613693323
Sensitivity: 0.6456140350877193
Specificity: 0.6456375838926175
Threshold: 0.13
Accuracy:  0.6456338028169014

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.4181992385536432
AUROC: 0.7308957059704349
AUPRC: 0.35561422548863364
Sensitivity: 0.6750599520383693
Specificity: 0.6633802816901408
Threshold: 0.13
Accuracy:  0.6652925009815469

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0092.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.41024225524493624
AUROC: 0.6962745790651125
AUPRC: 0.3277275778093335
Sensitivity: 0.624561403508772
Specificity: 0.663758389261745
Threshold: 0.15
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.41it/s]
Loss: 0.4088581122457981
AUROC: 0.7345485583364294
AUPRC: 0.3611317621876355
Sensitivity: 0.657074340527578
Specificity: 0.6873239436619718
Threshold: 0.15
Accuracy:  0.6823714173537495

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0093.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.4165907140289034
AUROC: 0.6953797244789827
AUPRC: 0.3271816949583273
Sensitivity: 0.6736842105263158
Specificity: 0.6261744966442953
Threshold: 0.12
Accuracy:  0.6338028169014085

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.50it/s]
Loss: 0.41538911275565626
AUROC: 0.7314027651118542
AUPRC: 0.3586184768887596
Sensitivity: 0.697841726618705
Specificity: 0.6424882629107981
Threshold: 0.12
Accuracy:  0.6515508441303495

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0094.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.418872988649777
AUROC: 0.6957894736842105
AUPRC: 0.3285497222160817
Sensitivity: 0.6701754385964912
Specificity: 0.6201342281879194
Threshold: 0.13
Accuracy:  0.6281690140845071

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.4189464382827282
AUROC: 0.7301679782934216
AUPRC: 0.3544654773122453
Sensitivity: 0.7026378896882494
Specificity: 0.639906103286385
Threshold: 0.13
Accuracy:  0.6501766784452296

Intermediate Model:
  ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0095.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.42974095046520233
AUROC: 0.6960037678087837
AUPRC: 0.32219255284848225
Sensitivity: 0.6631578947368421
Specificity: 0.6456375838926175
Threshold: 0.12
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.43173202984035014
AUROC: 0.7318073710046047
AUPRC: 0.35354890786572407
Sensitivity: 0.6738609112709832
Specificity: 0.6626760563380282
Threshold: 0.12
Accuracy:  0.6645072634471928


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      75, 0.4034
  Epoch with best model Test AUROC:     68, 0.7387
  Epoch with best model Test Accuracy:  11, 0.6979

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   75, 0.4034
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0075.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4017699170857668
AUROC: 0.7350525213631911
AUPRC: 0.36291489427329615
Sensitivity: 0.6534772182254197
Specificity: 0.6929577464788732
Threshold: 0.14
Accuracy:  0.6864939144091088
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.7350525213631911
best_model_val_test_auprc: 0.36291489427329615

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  68, 0.7387
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/ABP_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_61321b51_0068.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.39476137682795526
AUROC: 0.738689611690929
AUPRC: 0.36127186806640554
Sensitivity: 0.6642685851318945
Specificity: 0.6755868544600939
Threshold: 0.17
Accuracy:  0.673733804475854
best_model_auroc_test_auroc: 0.738689611690929
best_model_auroc_test_auprc: 0.36127186806640554

Total Processing Time: 6501.7400 sec
In [101]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=False, 
        useEeg=False, 
        useEcg=True,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           False
  use_eeg:           False
  use_ecg:           True
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (ecgResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (ecgFc): Linear(in_features=2814, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=32, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.97it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
[2024-05-04 11:18:24.841771] Completed epoch 0 with training loss 0.51032150, validation loss 0.51421815
Validation loss improved to 0.51421815. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:19:10.956080] Completed epoch 1 with training loss 0.44944572, validation loss 0.45066428
Validation loss improved to 0.45066428. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.96it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 11:19:57.491513] Completed epoch 2 with training loss 0.44131058, validation loss 0.45395562
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 11:20:43.571979] Completed epoch 3 with training loss 0.44278201, validation loss 0.45973280
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.96it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
[2024-05-04 11:21:30.150836] Completed epoch 4 with training loss 0.44153357, validation loss 0.45917776
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 11:22:16.276232] Completed epoch 5 with training loss 0.44082674, validation loss 0.46886459
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:23:02.392120] Completed epoch 6 with training loss 0.44224119, validation loss 0.46357638
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:23:48.567548] Completed epoch 7 with training loss 0.44110280, validation loss 0.46600774
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 11:24:34.737858] Completed epoch 8 with training loss 0.44217172, validation loss 0.47331589
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.99it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
[2024-05-04 11:25:20.638890] Completed epoch 9 with training loss 0.44151354, validation loss 0.47412685
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
[2024-05-04 11:26:06.859949] Completed epoch 10 with training loss 0.44133219, validation loss 0.47292089
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 11:26:53.040302] Completed epoch 11 with training loss 0.44007325, validation loss 0.48198318
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.99it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 11:27:38.825511] Completed epoch 12 with training loss 0.44047707, validation loss 0.49962664
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:28:25.072011] Completed epoch 13 with training loss 0.44033232, validation loss 0.50812960
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
[2024-05-04 11:29:11.036174] Completed epoch 14 with training loss 0.44078246, validation loss 0.52645999
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:29:57.117276] Completed epoch 15 with training loss 0.43974686, validation loss 0.54129100
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.99it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:30:43.113741] Completed epoch 16 with training loss 0.43917704, validation loss 0.54766119
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.93it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
[2024-05-04 11:31:30.296133] Completed epoch 17 with training loss 0.43691984, validation loss 0.58838594
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 11:32:16.447384] Completed epoch 18 with training loss 0.43636021, validation loss 0.60703462
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.99it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.51it/s]
[2024-05-04 11:33:02.333172] Completed epoch 19 with training loss 0.43454409, validation loss 0.61463350
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.97it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 11:33:48.654343] Completed epoch 20 with training loss 0.43446332, validation loss 0.64885241
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:40<00:00,  1.98it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
[2024-05-04 11:34:34.701887] Completed epoch 21 with training loss 0.43300739, validation loss 0.62912124
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:    1, 0.4507

Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:04<00:00,  2.90it/s]
Loss: 0.5147509021418435
AUROC: 0.5150182503237961
AUPRC: 0.17327776537754772
Sensitivity: 0.5157894736842106
Specificity: 0.48322147651006714
Threshold: 0.33
Accuracy:  0.48845070422535214

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.5166056379675865
AUROC: 0.4961591290348003
AUPRC: 0.1644256586829966
Sensitivity: 0.4844124700239808
Specificity: 0.5070422535211268
Threshold: 0.33
Accuracy:  0.503337259521005

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.4506526951278959
AUROC: 0.5230519251148005
AUPRC: 0.1855061355653631
Sensitivity: 0.43157894736842106
Specificity: 0.5959731543624162
Threshold: 0.22
Accuracy:  0.5695774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.45552014783024786
AUROC: 0.49583839970277305
AUPRC: 0.16850943851242872
Sensitivity: 0.39448441247002397
Specificity: 0.6157276995305164
Threshold: 0.22
Accuracy:  0.5795053003533569

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.45438295177050997
AUROC: 0.5109596137995996
AUPRC: 0.17544351869966968
Sensitivity: 0.06315789473684211
Specificity: 0.959731543624161
Threshold: 0.23
Accuracy:  0.8157746478873239

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4579848572611809
AUROC: 0.5000185766879454
AUPRC: 0.16778712950705382
Sensitivity: 0.03477218225419664
Specificity: 0.9725352112676057
Threshold: 0.23
Accuracy:  0.8190027483313702

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4605179450341633
AUROC: 0.49841281054986464
AUPRC: 0.16767901052461515
Sensitivity: 0.6736842105263158
Specificity: 0.32483221476510066
Threshold: 0.24
Accuracy:  0.38084507042253524

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.50it/s]
Loss: 0.46367635354399683
AUROC: 0.5027573715675346
AUPRC: 0.16541361355928969
Sensitivity: 0.7026378896882494
Specificity: 0.3049295774647887
Threshold: 0.24
Accuracy:  0.37004318806438946

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4589798386607851
AUROC: 0.487235370304957
AUPRC: 0.16052359074794142
Sensitivity: 0.23157894736842105
Specificity: 0.7355704697986577
Threshold: 0.24
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4627133093774319
AUROC: 0.5067519224057374
AUPRC: 0.16751274111970316
Sensitivity: 0.23621103117505995
Specificity: 0.7678403755868545
Threshold: 0.24
Accuracy:  0.6808009422850412

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.4690441531794412
AUROC: 0.47945837748734244
AUPRC: 0.15540309524734464
Sensitivity: 0.4666666666666667
Specificity: 0.5067114093959731
Threshold: 0.26
Accuracy:  0.5002816901408451

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.50it/s]
Loss: 0.4723043471574783
AUROC: 0.5089069589398904
AUPRC: 0.1676362905069843
Sensitivity: 0.5011990407673861
Specificity: 0.5091549295774648
Threshold: 0.26
Accuracy:  0.5078523753435414

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.46357801982334684
AUROC: 0.4837160014129283
AUPRC: 0.1606564872709776
Sensitivity: 0.3263157894736842
Specificity: 0.6442953020134228
Threshold: 0.25
Accuracy:  0.5932394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4673511616885662
AUROC: 0.5070528084574594
AUPRC: 0.1662776462727409
Sensitivity: 0.3645083932853717
Specificity: 0.6415492957746479
Threshold: 0.25
Accuracy:  0.5961915979583824

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4662888092654092
AUROC: 0.48027434357706345
AUPRC: 0.15610854558834444
Sensitivity: 0.9929824561403509
Specificity: 0.0174496644295302
Threshold: 0.25
Accuracy:  0.17408450704225353

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.46937362998723986
AUROC: 0.5075975839047072
AUPRC: 0.17023581687652634
Sensitivity: 0.9844124700239808
Specificity: 0.01807511737089202
Threshold: 0.25
Accuracy:  0.1762858264625049

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4734108511890684
AUROC: 0.4731119745672907
AUPRC: 0.15194401229843937
Sensitivity: 0.10877192982456141
Specificity: 0.8986577181208054
Threshold: 0.27
Accuracy:  0.7718309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.4767419248819351
AUROC: 0.4980815347721822
AUPRC: 0.16446135686800736
Sensitivity: 0.07913669064748201
Specificity: 0.9086854460093897
Threshold: 0.27
Accuracy:  0.7728700431880644

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.47421341495854513
AUROC: 0.47332744613210875
AUPRC: 0.14994003623481064
Sensitivity: 0.49122807017543857
Specificity: 0.4463087248322148
Threshold: 0.27
Accuracy:  0.4535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.52it/s]
Loss: 0.4775531440973282
AUROC: 0.49048043255536417
AUPRC: 0.1586809093026939
Sensitivity: 0.5323741007194245
Specificity: 0.45704225352112676
Threshold: 0.27
Accuracy:  0.46937573616018846

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.4733578222138541
AUROC: 0.48616389968209117
AUPRC: 0.1550859948495409
Sensitivity: 0.24561403508771928
Specificity: 0.738255033557047
Threshold: 0.27
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.47656386643648146
AUROC: 0.492043688992468
AUPRC: 0.16013041880417636
Sensitivity: 0.24580335731414868
Specificity: 0.7467136150234742
Threshold: 0.27
Accuracy:  0.6647035728307813

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4824556601899011
AUROC: 0.5126409984693276
AUPRC: 0.16266290908983866
Sensitivity: 0.9052631578947369
Specificity: 0.13557046979865772
Threshold: 0.28
Accuracy:  0.2591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4854844272136688
AUROC: 0.49966139764244943
AUPRC: 0.16268459154004952
Sensitivity: 0.8752997601918465
Specificity: 0.12769953051643193
Threshold: 0.28
Accuracy:  0.25009815469179425

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.49976785268102375
AUROC: 0.5193630048275051
AUPRC: 0.16516915193971737
Sensitivity: 0.6035087719298246
Specificity: 0.42348993288590603
Threshold: 0.31
Accuracy:  0.4523943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.5026642046868801
AUROC: 0.49797457808401163
AUPRC: 0.16463840812145647
Sensitivity: 0.5671462829736211
Specificity: 0.4392018779342723
Threshold: 0.31
Accuracy:  0.4601491951315273

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.5074829799788338
AUROC: 0.5416448840221358
AUPRC: 0.1730893662228909
Sensitivity: 0.6807017543859649
Specificity: 0.40671140939597317
Threshold: 0.32
Accuracy:  0.4507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.510493491590023
AUROC: 0.4961670100539287
AUPRC: 0.16358455784785172
Sensitivity: 0.6019184652278178
Specificity: 0.4025821596244131
Threshold: 0.32
Accuracy:  0.43521790341578326

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.5265220488820758
AUROC: 0.5443918521135053
AUPRC: 0.17190937212463953
Sensitivity: 0.312280701754386
Specificity: 0.7335570469798658
Threshold: 0.35000000000000003
Accuracy:  0.6659154929577464

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.5290775246918201
AUROC: 0.4962969061370622
AUPRC: 0.1679543171305585
Sensitivity: 0.2541966426858513
Specificity: 0.754225352112676
Threshold: 0.35000000000000003
Accuracy:  0.6723596387907342

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.5412276046616691
AUROC: 0.5431190392087601
AUPRC: 0.1713369812580113
Sensitivity: 0.8526315789473684
Specificity: 0.21073825503355706
Threshold: 0.36
Accuracy:  0.31380281690140843

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.5436627447605134
AUROC: 0.4978566442620551
AUPRC: 0.166334803406953
Sensitivity: 0.7781774580335732
Specificity: 0.19788732394366196
Threshold: 0.36
Accuracy:  0.292893600314095

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.5475495627948216
AUROC: 0.5508006593665371
AUPRC: 0.17921925985445106
Sensitivity: 0.6491228070175439
Specificity: 0.41879194630872485
Threshold: 0.37
Accuracy:  0.45577464788732397

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.49it/s]
Loss: 0.5499849572777749
AUROC: 0.5074201202418347
AUPRC: 0.1756314285303629
Sensitivity: 0.6031175059952039
Specificity: 0.41619718309859155
Threshold: 0.37
Accuracy:  0.44680015704750686

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.50it/s]
Loss: 0.5882890735353742
AUROC: 0.5316743200282585
AUPRC: 0.178041869631208
Sensitivity: 0.9087719298245615
Specificity: 0.11812080536912752
Threshold: 0.41000000000000003
Accuracy:  0.24507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.5896923124790192
AUROC: 0.5147144256425845
AUPRC: 0.17073243672074426
Sensitivity: 0.8932853717026379
Specificity: 0.10868544600938967
Threshold: 0.41000000000000003
Accuracy:  0.23714173537495092

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.6068638435431889
AUROC: 0.5260967855881313
AUPRC: 0.1688587474249689
Sensitivity: 0.6385964912280702
Specificity: 0.37986577181208053
Threshold: 0.43
Accuracy:  0.42140845070422533

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.6081050962209702
AUROC: 0.516346781729546
AUPRC: 0.17021143565501282
Sensitivity: 0.6618705035971223
Specificity: 0.3805164319248826
Threshold: 0.43
Accuracy:  0.4265802905378877

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.6145940933908735
AUROC: 0.5288531732014601
AUPRC: 0.17397750960405572
Sensitivity: 1.0
Specificity: 0.00738255033557047
Threshold: 0.43
Accuracy:  0.1667605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.6155351504683495
AUROC: 0.521038662028124
AUPRC: 0.16984791272623095
Sensitivity: 0.9964028776978417
Specificity: 0.00727699530516432
Threshold: 0.43
Accuracy:  0.16921868865331763

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.6488627748829978
AUROC: 0.5158707170611092
AUPRC: 0.16626756043530744
Sensitivity: 0.9894736842105263
Specificity: 0.010738255033557046
Threshold: 0.46
Accuracy:  0.16788732394366196

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.6493333041667938
AUROC: 0.5357091791355648
AUPRC: 0.1724748826923705
Sensitivity: 0.9832134292565947
Specificity: 0.013849765258215962
Threshold: 0.46
Accuracy:  0.17255594817432274

Intermediate Model:
  ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.6290683746337891
AUROC: 0.5191934534322383
AUPRC: 0.16473598532195366
Sensitivity: 0.512280701754386
Specificity: 0.508724832214765
Threshold: 0.45
Accuracy:  0.5092957746478873

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.6297683119773865
AUROC: 0.5411026108690512
AUPRC: 0.17289634962718992
Sensitivity: 0.5515587529976019
Specificity: 0.5178403755868545
Threshold: 0.45
Accuracy:  0.5233608166470357


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:       1, 0.4507
  Epoch with best model Test AUROC:     21, 0.5411
  Epoch with best model Test Accuracy:   2, 0.819

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:    1, 0.4507
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0001.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.45552014783024786
AUROC: 0.49583839970277305
AUPRC: 0.16850943851242872
Sensitivity: 0.39448441247002397
Specificity: 0.6157276995305164
Threshold: 0.22
Accuracy:  0.5795053003533569
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.49583839970277305
best_model_val_test_auprc: 0.16850943851242872

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  21, 0.5411
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_3ac4acf1_0021.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.47it/s]
Loss: 0.6297683119773865
AUROC: 0.5411026108690512
AUPRC: 0.17289634962718992
Sensitivity: 0.5515587529976019
Specificity: 0.5178403755868545
Threshold: 0.45
Accuracy:  0.5233608166470357
best_model_auroc_test_auroc: 0.5411026108690512
best_model_auroc_test_auprc: 0.17289634962718992

Total Processing Time: 1550.2800 sec
In [102]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=False, 
        useEeg=True, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           False
  use_eeg:           True
  use_ecg:           False
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (eegResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
  )
  (eegFc): Linear(in_features=720, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=32, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:35<00:00,  2.24it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 11:44:10.153807] Completed epoch 0 with training loss 0.65529382, validation loss 0.58569753
Validation loss improved to 0.58569753. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:44:49.049857] Completed epoch 1 with training loss 0.49936652, validation loss 0.51570785
Validation loss improved to 0.51570785. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.62it/s]
[2024-05-04 11:45:27.903812] Completed epoch 2 with training loss 0.47698087, validation loss 0.50500995
Validation loss improved to 0.50500995. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.65it/s]
[2024-05-04 11:46:06.668081] Completed epoch 3 with training loss 0.46835691, validation loss 0.49116319
Validation loss improved to 0.49116319. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.40it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.62it/s]
[2024-05-04 11:46:45.438340] Completed epoch 4 with training loss 0.46247277, validation loss 0.48385462
Validation loss improved to 0.48385462. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.62it/s]
[2024-05-04 11:47:24.422627] Completed epoch 5 with training loss 0.45780683, validation loss 0.47856578
Validation loss improved to 0.47856578. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.59it/s]
[2024-05-04 11:48:03.357016] Completed epoch 6 with training loss 0.45441812, validation loss 0.47386971
Validation loss improved to 0.47386971. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.40it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.61it/s]
[2024-05-04 11:48:42.199286] Completed epoch 7 with training loss 0.45112294, validation loss 0.47080737
Validation loss improved to 0.47080737. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.37it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:49:21.467223] Completed epoch 8 with training loss 0.44845122, validation loss 0.46971825
Validation loss improved to 0.46971825. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 11:50:00.446232] Completed epoch 9 with training loss 0.44824067, validation loss 0.46672088
Validation loss improved to 0.46672088. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:50:39.563371] Completed epoch 10 with training loss 0.44701061, validation loss 0.46301150
Validation loss improved to 0.46301150. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:51:18.447327] Completed epoch 11 with training loss 0.44299451, validation loss 0.46529678
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.37it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.59it/s]
[2024-05-04 11:51:57.630215] Completed epoch 12 with training loss 0.44480067, validation loss 0.45963910
Validation loss improved to 0.45963910. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:52:36.521973] Completed epoch 13 with training loss 0.44361669, validation loss 0.46062091
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 11:53:15.357241] Completed epoch 14 with training loss 0.44252115, validation loss 0.46313688
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.61it/s]
[2024-05-04 11:53:54.433167] Completed epoch 15 with training loss 0.44247085, validation loss 0.46529269
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.61it/s]
[2024-05-04 11:54:33.268960] Completed epoch 16 with training loss 0.44337970, validation loss 0.45901987
Validation loss improved to 0.45901987. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 11:55:12.189597] Completed epoch 17 with training loss 0.44044122, validation loss 0.46403414
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:34<00:00,  2.35it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.55it/s]
[2024-05-04 11:55:51.732764] Completed epoch 18 with training loss 0.44104472, validation loss 0.46182135
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.40it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.64it/s]
[2024-05-04 11:56:30.449862] Completed epoch 19 with training loss 0.44207501, validation loss 0.46043226
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 11:57:09.401741] Completed epoch 20 with training loss 0.43971482, validation loss 0.46331364
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.59it/s]
[2024-05-04 11:57:48.359638] Completed epoch 21 with training loss 0.44080192, validation loss 0.46409065
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:58:27.320983] Completed epoch 22 with training loss 0.44068232, validation loss 0.46121094
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.40it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 11:59:06.070352] Completed epoch 23 with training loss 0.44010967, validation loss 0.46069136
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 11:59:44.974719] Completed epoch 24 with training loss 0.43966669, validation loss 0.45589954
Validation loss improved to 0.45589954. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.62it/s]
[2024-05-04 12:00:23.883602] Completed epoch 25 with training loss 0.43942815, validation loss 0.45900416
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 12:01:03.254216] Completed epoch 26 with training loss 0.44017324, validation loss 0.46310067
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.39it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.59it/s]
[2024-05-04 12:01:42.151388] Completed epoch 27 with training loss 0.43945837, validation loss 0.46153444
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.64it/s]
[2024-05-04 12:02:21.324241] Completed epoch 28 with training loss 0.43852979, validation loss 0.46165034
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.40it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 12:03:00.159015] Completed epoch 29 with training loss 0.43987185, validation loss 0.46603742
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.35it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.62it/s]
[2024-05-04 12:03:39.542452] Completed epoch 30 with training loss 0.43880779, validation loss 0.45897442
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.37it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 12:04:18.652403] Completed epoch 31 with training loss 0.43937016, validation loss 0.46129647
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 12:04:57.579729] Completed epoch 32 with training loss 0.43851003, validation loss 0.46316448
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:34<00:00,  2.30it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 12:05:37.766693] Completed epoch 33 with training loss 0.43914384, validation loss 0.46449614
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.63it/s]
[2024-05-04 12:06:17.031090] Completed epoch 34 with training loss 0.43885773, validation loss 0.46291277
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 12:06:56.384294] Completed epoch 35 with training loss 0.43752345, validation loss 0.47046122
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.37it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.65it/s]
[2024-05-04 12:07:35.480316] Completed epoch 36 with training loss 0.43722025, validation loss 0.46584401
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 12:08:14.898379] Completed epoch 37 with training loss 0.43666989, validation loss 0.46527201
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.36it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.65it/s]
[2024-05-04 12:08:54.052761] Completed epoch 38 with training loss 0.43831283, validation loss 0.46565363
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:34<00:00,  2.32it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 12:09:34.118490] Completed epoch 39 with training loss 0.43735379, validation loss 0.47049257
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:34<00:00,  2.34it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.60it/s]
[2024-05-04 12:10:13.784889] Completed epoch 40 with training loss 0.43600339, validation loss 0.47757980
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:33<00:00,  2.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.54it/s]
[2024-05-04 12:10:53.029704] Completed epoch 41 with training loss 0.43787700, validation loss 0.47575322
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:34<00:00,  2.32it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.58it/s]
[2024-05-04 12:11:32.979156] Completed epoch 42 with training loss 0.43659696, validation loss 0.48340854
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:35<00:00,  2.28it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
[2024-05-04 12:12:14.115228] Completed epoch 43 with training loss 0.43631965, validation loss 0.48294586
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:35<00:00,  2.24it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.53it/s]
[2024-05-04 12:12:55.517228] Completed epoch 44 with training loss 0.43699107, validation loss 0.49186113
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   24, 0.4559
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.77it/s]
Loss: 0.5855566561222076
AUROC: 0.46940303779583187
AUPRC: 0.1549516514552022
Sensitivity: 0.4631578947368421
Specificity: 0.5221476510067115
Threshold: 0.4
Accuracy:  0.5126760563380282

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.5763800799846649
AUROC: 0.48664293916979096
AUPRC: 0.1690305030368753
Sensitivity: 0.4748201438848921
Specificity: 0.49178403755868544
Threshold: 0.4
Accuracy:  0.489006674519042

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.5169248559645244
AUROC: 0.4707323678323325
AUPRC: 0.15564498734144003
Sensitivity: 0.4842105263157895
Specificity: 0.49261744966442955
Threshold: 0.29
Accuracy:  0.49126760563380284

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.5051016464829445
AUROC: 0.48830766372817236
AUPRC: 0.1696397301126384
Sensitivity: 0.49760191846522783
Specificity: 0.4666666666666667
Threshold: 0.29
Accuracy:  0.4717314487632509

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.5042930841445923
AUROC: 0.47167196514776877
AUPRC: 0.15645238986536367
Sensitivity: 0.4842105263157895
Specificity: 0.4993288590604027
Threshold: 0.28
Accuracy:  0.49690140845070424

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.35it/s]
Loss: 0.4960841082036495
AUROC: 0.48986866844552535
AUPRC: 0.17030232344732532
Sensitivity: 0.4940047961630695
Specificity: 0.4737089201877934
Threshold: 0.28
Accuracy:  0.47703180212014135

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.49155715107917786
AUROC: 0.47203932650417996
AUPRC: 0.15725145109662408
Sensitivity: 0.4982456140350877
Specificity: 0.4691275167785235
Threshold: 0.26
Accuracy:  0.47380281690140846

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.4850615821778774
AUROC: 0.49186552166717323
AUPRC: 0.17109057462715363
Sensitivity: 0.5083932853717026
Specificity: 0.4448356807511737
Threshold: 0.26
Accuracy:  0.4552414605418139

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4841266657624926
AUROC: 0.47312728129047454
AUPRC: 0.15784405048640798
Sensitivity: 0.49473684210526314
Specificity: 0.4778523489932886
Threshold: 0.25
Accuracy:  0.48056338028169016

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.47850829884409907
AUROC: 0.49367745240427374
AUPRC: 0.17179625252534958
Sensitivity: 0.5083932853717026
Specificity: 0.457981220657277
Threshold: 0.25
Accuracy:  0.4662347860227719

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.47779351472854614
AUROC: 0.4735111268103144
AUPRC: 0.15796500477072112
Sensitivity: 0.5087719298245614
Specificity: 0.46308724832214765
Threshold: 0.24
Accuracy:  0.4704225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.47368082478642465
AUROC: 0.4962103556591346
AUPRC: 0.17275495797162516
Sensitivity: 0.5179856115107914
Specificity: 0.4450704225352113
Threshold: 0.24
Accuracy:  0.45700824499411075

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.47447312091078075
AUROC: 0.474662663369834
AUPRC: 0.15824286363477863
Sensitivity: 0.48771929824561405
Specificity: 0.4986577181208054
Threshold: 0.24
Accuracy:  0.49690140845070424

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.47077281698584555
AUROC: 0.49882812060210985
AUPRC: 0.173677451080622
Sensitivity: 0.5023980815347722
Specificity: 0.48615023474178404
Threshold: 0.24
Accuracy:  0.48881036513545345

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.46976850075381144
AUROC: 0.47504886377016364
AUPRC: 0.1583717592713205
Sensitivity: 0.49122807017543857
Specificity: 0.4919463087248322
Threshold: 0.23
Accuracy:  0.49183098591549296

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.4666455052793026
AUROC: 0.5018316332849213
AUPRC: 0.17476213367971138
Sensitivity: 0.5071942446043165
Specificity: 0.4847417840375587
Threshold: 0.23
Accuracy:  0.4884177463682764

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
Loss: 0.4699321304048811
AUROC: 0.475376192158248
AUPRC: 0.1585148276618753
Sensitivity: 0.5228070175438596
Specificity: 0.44161073825503355
Threshold: 0.23
Accuracy:  0.4546478873239437

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.34it/s]
Loss: 0.46676242128014567
AUROC: 0.5051835995991939
AUPRC: 0.17584819476036453
Sensitivity: 0.4556354916067146
Specificity: 0.5619718309859155
Threshold: 0.24
Accuracy:  0.5445622300745976

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
Loss: 0.46674724348953794
AUROC: 0.4763110797127046
AUPRC: 0.15894943803074546
Sensitivity: 0.4807017543859649
Specificity: 0.5154362416107383
Threshold: 0.23
Accuracy:  0.5098591549295775

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.17it/s]
Loss: 0.4638654373586178
AUROC: 0.5086610992895824
AUPRC: 0.17700834987362585
Sensitivity: 0.5
Specificity: 0.5124413145539906
Threshold: 0.23
Accuracy:  0.5104043973301924

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.46350340970924925
AUROC: 0.4771682562109973
AUPRC: 0.15943679775033226
Sensitivity: 0.5157894736842106
Specificity: 0.47651006711409394
Threshold: 0.22
Accuracy:  0.4828169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.460114324837923
AUROC: 0.5128167888224632
AUPRC: 0.1785193661815856
Sensitivity: 0.5251798561151079
Specificity: 0.4823943661971831
Threshold: 0.22
Accuracy:  0.48939929328621906

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.46483116490500315
AUROC: 0.47783350994937007
AUPRC: 0.15949706475306136
Sensitivity: 0.49473684210526314
Specificity: 0.4691275167785235
Threshold: 0.23
Accuracy:  0.4732394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.37it/s]
Loss: 0.46234987750649453
AUROC: 0.5175086691210412
AUPRC: 0.1804124767603888
Sensitivity: 0.5323741007194245
Specificity: 0.48896713615023474
Threshold: 0.23
Accuracy:  0.4960738123282293

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.45858317826475414
AUROC: 0.47788767220063577
AUPRC: 0.15938300094215258
Sensitivity: 0.5052631578947369
Specificity: 0.43087248322147653
Threshold: 0.21
Accuracy:  0.4428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.45596057921648026
AUROC: 0.5217043266795015
AUPRC: 0.1823364973697902
Sensitivity: 0.5551558752997602
Specificity: 0.4603286384976526
Threshold: 0.21
Accuracy:  0.4758539458186101

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.4607907554933003
AUROC: 0.4781902743435771
AUPRC: 0.15926902036238866
Sensitivity: 0.4666666666666667
Specificity: 0.5013422818791946
Threshold: 0.22
Accuracy:  0.49577464788732395

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.45704882889986037
AUROC: 0.5261791974870808
AUPRC: 0.1845216068448985
Sensitivity: 0.4952038369304556
Specificity: 0.5206572769953052
Threshold: 0.22
Accuracy:  0.516489988221437

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.4631763462509428
AUROC: 0.4783880843047216
AUPRC: 0.1589583652126203
Sensitivity: 0.47017543859649125
Specificity: 0.5033557046979866
Threshold: 0.23
Accuracy:  0.49802816901408453

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.35it/s]
Loss: 0.45987378880381585
AUROC: 0.5296655633239886
AUPRC: 0.18619948772492828
Sensitivity: 0.4988009592326139
Specificity: 0.5241784037558685
Threshold: 0.23
Accuracy:  0.5200235571260307

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4654813621725355
AUROC: 0.47799717414341225
AUPRC: 0.15843396273304844
Sensitivity: 0.45614035087719296
Specificity: 0.5187919463087248
Threshold: 0.24
Accuracy:  0.5087323943661972

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4622958779335022
AUROC: 0.5366874106348725
AUPRC: 0.18900238020045196
Sensitivity: 0.49280575539568344
Specificity: 0.5422535211267606
Threshold: 0.24
Accuracy:  0.5341578327444052

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.4598856802497591
AUROC: 0.47855057105851884
AUPRC: 0.1586841393494534
Sensitivity: 0.49473684210526314
Specificity: 0.4771812080536913
Threshold: 0.22
Accuracy:  0.48

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.36it/s]
Loss: 0.45579307824373244
AUROC: 0.5406348160907893
AUPRC: 0.19087874828808582
Sensitivity: 0.5311750599520384
Specificity: 0.5046948356807511
Threshold: 0.22
Accuracy:  0.5090302316450727

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.4624402288879667
AUROC: 0.47960320263746614
AUPRC: 0.15897349374055758
Sensitivity: 0.5543859649122806
Specificity: 0.39731543624161075
Threshold: 0.23
Accuracy:  0.4225352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.35it/s]
Loss: 0.46005481109023094
AUROC: 0.5456015469314689
AUPRC: 0.1845711457741262
Sensitivity: 0.6067146282973621
Specificity: 0.43427230046948356
Threshold: 0.23
Accuracy:  0.4625049077345897

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4619409888982773
AUROC: 0.4803449899917579
AUPRC: 0.15925832034676696
Sensitivity: 0.49473684210526314
Specificity: 0.48456375838926175
Threshold: 0.23
Accuracy:  0.48619718309859156

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.35it/s]
Loss: 0.45793523266911507
AUROC: 0.5496367694576734
AUPRC: 0.18646502638685317
Sensitivity: 0.5467625899280576
Specificity: 0.5192488262910798
Threshold: 0.23
Accuracy:  0.5237534354142128

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.4597687785114561
AUROC: 0.48213705404450735
AUPRC: 0.15946183018390525
Sensitivity: 0.4280701754385965
Specificity: 0.5785234899328859
Threshold: 0.23
Accuracy:  0.5543661971830985

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.41it/s]
Loss: 0.4555946923792362
AUROC: 0.5541141734499724
AUPRC: 0.188469266617025
Sensitivity: 0.46402877697841727
Specificity: 0.6131455399061033
Threshold: 0.23
Accuracy:  0.5887318413820181

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.46171645394393374
AUROC: 0.483834922877664
AUPRC: 0.15984513627785568
Sensitivity: 0.5087719298245614
Specificity: 0.43288590604026844
Threshold: 0.23
Accuracy:  0.4450704225352113

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.4579155907034874
AUROC: 0.5569937008139967
AUPRC: 0.18983299989893498
Sensitivity: 0.5899280575539568
Specificity: 0.49061032863849763
Threshold: 0.23
Accuracy:  0.5068708284255987

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
Loss: 0.46442042929785593
AUROC: 0.4853349817496762
AUPRC: 0.15972625700276322
Sensitivity: 0.43859649122807015
Specificity: 0.5429530201342282
Threshold: 0.24
Accuracy:  0.5261971830985915

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.36it/s]
Loss: 0.4585201822221279
AUROC: 0.5606860990081174
AUPRC: 0.1934596741924754
Sensitivity: 0.49760191846522783
Specificity: 0.5913145539906103
Threshold: 0.24
Accuracy:  0.5759717314487632

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.4614546788590295
AUROC: 0.48682208877899447
AUPRC: 0.1602425232576076
Sensitivity: 0.44912280701754387
Specificity: 0.5053691275167785
Threshold: 0.23
Accuracy:  0.49633802816901407

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.4556464947760105
AUROC: 0.56173905945666
AUPRC: 0.19176001603124648
Sensitivity: 0.5323741007194245
Specificity: 0.5596244131455399
Threshold: 0.23
Accuracy:  0.5551629367883785

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.4602164030075073
AUROC: 0.4869056870363829
AUPRC: 0.1593103570792307
Sensitivity: 0.4631578947368421
Specificity: 0.508724832214765
Threshold: 0.23
Accuracy:  0.5014084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.455323825776577
AUROC: 0.5657084191801488
AUPRC: 0.19596122734204352
Sensitivity: 0.5323741007194245
Specificity: 0.5549295774647888
Threshold: 0.23
Accuracy:  0.5512367491166078

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
Loss: 0.45539185404777527
AUROC: 0.4885187801719063
AUPRC: 0.15928900529301493
Sensitivity: 0.5263157894736842
Specificity: 0.45302013422818793
Threshold: 0.21
Accuracy:  0.4647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4501290529966354
AUROC: 0.5681875626259556
AUPRC: 0.19768096412552966
Sensitivity: 0.5935251798561151
Specificity: 0.5009389671361503
Threshold: 0.21
Accuracy:  0.5160973694542599

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4587583052260535
AUROC: 0.4912304250559284
AUPRC: 0.15965863793052404
Sensitivity: 0.43508771929824563
Specificity: 0.5637583892617449
Threshold: 0.23
Accuracy:  0.5430985915492957

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4535900138318539
AUROC: 0.5704957161031737
AUPRC: 0.19882489074433604
Sensitivity: 0.4988009592326139
Specificity: 0.5971830985915493
Threshold: 0.23
Accuracy:  0.5810757754220651

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.463211721607617
AUROC: 0.4939844577887672
AUPRC: 0.16053784218127864
Sensitivity: 0.47017543859649125
Specificity: 0.5221476510067115
Threshold: 0.24
Accuracy:  0.5138028169014085

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.37it/s]
Loss: 0.458022877573967
AUROC: 0.571960741266142
AUPRC: 0.19939105061319345
Sensitivity: 0.5419664268585132
Specificity: 0.5565727699530516
Threshold: 0.24
Accuracy:  0.5541813898704359

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.4618041664361954
AUROC: 0.4961862710467444
AUPRC: 0.16138265994914236
Sensitivity: 0.5473684210526316
Specificity: 0.45503355704697984
Threshold: 0.23
Accuracy:  0.46985915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4560590036213398
AUROC: 0.5718406964569189
AUPRC: 0.19782852093013895
Sensitivity: 0.60431654676259
Specificity: 0.4931924882629108
Threshold: 0.23
Accuracy:  0.5113859442481351

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.4625317645924432
AUROC: 0.4980018839043918
AUPRC: 0.16206477617178214
Sensitivity: 0.5333333333333333
Specificity: 0.4604026845637584
Threshold: 0.23
Accuracy:  0.47211267605633805

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.45560090318322183
AUROC: 0.5736475608245798
AUPRC: 0.19644685343868742
Sensitivity: 0.5983213429256595
Specificity: 0.5018779342723004
Threshold: 0.23
Accuracy:  0.5176678445229682

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
Loss: 0.466445546065058
AUROC: 0.5002343106087366
AUPRC: 0.16279596901704657
Sensitivity: 0.543859649122807
Specificity: 0.4436241610738255
Threshold: 0.24
Accuracy:  0.4597183098591549

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.46004557982087135
AUROC: 0.573792233818579
AUPRC: 0.19631291822314006
Sensitivity: 0.5047961630695443
Specificity: 0.5946009389671362
Threshold: 0.25
Accuracy:  0.579897919120534

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.45908066630363464
AUROC: 0.503973860826563
AUPRC: 0.16347088661907097
Sensitivity: 0.45964912280701753
Specificity: 0.5604026845637584
Threshold: 0.23
Accuracy:  0.5442253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.45266508385539056
AUROC: 0.576311908219903
AUPRC: 0.20138040614438651
Sensitivity: 0.5179856115107914
Specificity: 0.5838028169014085
Threshold: 0.23
Accuracy:  0.5730270906949352

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.4605738116162164
AUROC: 0.5051772047568586
AUPRC: 0.1636934725254297
Sensitivity: 0.49473684210526314
Specificity: 0.5181208053691275
Threshold: 0.23
Accuracy:  0.5143661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4538611337542534
AUROC: 0.5756476508933698
AUPRC: 0.196737285100331
Sensitivity: 0.5467625899280576
Specificity: 0.5497652582159624
Threshold: 0.23
Accuracy:  0.5492736552807225

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.46286160179546904
AUROC: 0.5106452372542094
AUPRC: 0.16535289496116617
Sensitivity: 0.49122807017543857
Specificity: 0.5543624161073826
Threshold: 0.24
Accuracy:  0.5442253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4558772586286068
AUROC: 0.5778568694340303
AUPRC: 0.19721449607129998
Sensitivity: 0.5311750599520384
Specificity: 0.578169014084507
Threshold: 0.24
Accuracy:  0.5704750687082842

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.46506741855825695
AUROC: 0.5117732250088308
AUPRC: 0.16577668793137645
Sensitivity: 0.5298245614035088
Specificity: 0.5107382550335571
Threshold: 0.24
Accuracy:  0.5138028169014085

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4576854266226292
AUROC: 0.577785940261875
AUPRC: 0.19721877339964214
Sensitivity: 0.5623501199040767
Specificity: 0.535680751173709
Threshold: 0.24
Accuracy:  0.5400471142520612

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.4631741451365607
AUROC: 0.51382197103497
AUPRC: 0.16670301467814103
Sensitivity: 0.5052631578947369
Specificity: 0.5523489932885906
Threshold: 0.24
Accuracy:  0.5447887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4559068650007248
AUROC: 0.5781536742437037
AUPRC: 0.19716251750306268
Sensitivity: 0.5347721822541966
Specificity: 0.5690140845070423
Threshold: 0.24
Accuracy:  0.563407930899097

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4699729595865522
AUROC: 0.5136641940421525
AUPRC: 0.16667961184312868
Sensitivity: 0.5403508771929825
Specificity: 0.49731543624161073
Threshold: 0.25
Accuracy:  0.504225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.37it/s]
Loss: 0.4621428318321705
AUROC: 0.5771180238907465
AUPRC: 0.197029536908023
Sensitivity: 0.5743405275779376
Specificity: 0.5274647887323943
Threshold: 0.25
Accuracy:  0.5351393796623478

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.46541281044483185
AUROC: 0.516329918756623
AUPRC: 0.16782314862009096
Sensitivity: 0.5368421052631579
Specificity: 0.5120805369127517
Threshold: 0.24
Accuracy:  0.516056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4576007895171642
AUROC: 0.5789412132266019
AUPRC: 0.19734988444271254
Sensitivity: 0.580335731414868
Specificity: 0.5284037558685446
Threshold: 0.24
Accuracy:  0.5369061641146446

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4659085124731064
AUROC: 0.5172341928647122
AUPRC: 0.16843933802299532
Sensitivity: 0.5649122807017544
Specificity: 0.487248322147651
Threshold: 0.24
Accuracy:  0.49971830985915494

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.45872835665941236
AUROC: 0.5779497528737573
AUPRC: 0.1968940261978992
Sensitivity: 0.5287769784172662
Specificity: 0.5807511737089202
Threshold: 0.25
Accuracy:  0.5722418531605811

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.465003422328404
AUROC: 0.517326033203815
AUPRC: 0.16811209554534565
Sensitivity: 0.5719298245614035
Specificity: 0.4986577181208054
Threshold: 0.24
Accuracy:  0.5104225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4579250678420067
AUROC: 0.5798240281014625
AUPRC: 0.1976124253178062
Sensitivity: 0.5275779376498801
Specificity: 0.5842723004694835
Threshold: 0.25
Accuracy:  0.5749901845308206

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.47090242377349306
AUROC: 0.5162404332980102
AUPRC: 0.16758762343701944
Sensitivity: 0.519298245614035
Specificity: 0.5315436241610738
Threshold: 0.26
Accuracy:  0.5295774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.46343662291765214
AUROC: 0.5787077380349241
AUPRC: 0.19747007255466742
Sensitivity: 0.5515587529976019
Specificity: 0.5542253521126761
Threshold: 0.26
Accuracy:  0.5537887711032587

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.47885047112192425
AUROC: 0.517326033203815
AUPRC: 0.16788093091262524
Sensitivity: 0.5614035087719298
Specificity: 0.5040268456375839
Threshold: 0.27
Accuracy:  0.5132394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4704911172389984
AUROC: 0.5805174170522738
AUPRC: 0.1981420064601716
Sensitivity: 0.5911270983213429
Specificity: 0.5192488262910798
Threshold: 0.27
Accuracy:  0.5310168826069886

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.47560972401074003
AUROC: 0.517184740374426
AUPRC: 0.16765298216344068
Sensitivity: 0.512280701754386
Specificity: 0.5395973154362416
Threshold: 0.27
Accuracy:  0.5352112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4675441309809685
AUROC: 0.5816355366411097
AUPRC: 0.1984611453521744
Sensitivity: 0.5623501199040767
Specificity: 0.5558685446009389
Threshold: 0.27
Accuracy:  0.5569297212406753

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.4842959706272398
AUROC: 0.5143659484281173
AUPRC: 0.16660622604846942
Sensitivity: 0.49473684210526314
Specificity: 0.5536912751677853
Threshold: 0.29
Accuracy:  0.5442253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.4760606586933136
AUROC: 0.5820298690624964
AUPRC: 0.19923954639118313
Sensitivity: 0.539568345323741
Specificity: 0.5706572769953052
Threshold: 0.29
Accuracy:  0.5655673341185709

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4820844041449683
AUROC: 0.513299187566231
AUPRC: 0.16639014863019203
Sensitivity: 0.5333333333333333
Specificity: 0.5053691275167785
Threshold: 0.28
Accuracy:  0.5098591549295775

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4729690313339233
AUROC: 0.5820056630751737
AUPRC: 0.19927856912296144
Sensitivity: 0.5911270983213429
Specificity: 0.5291079812206573
Threshold: 0.28
Accuracy:  0.5392618767177071

Intermediate Model:
  ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.491871850831168
AUROC: 0.5079041563640645
AUPRC: 0.16399853491686633
Sensitivity: 0.5228070175438596
Specificity: 0.5026845637583892
Threshold: 0.3
Accuracy:  0.5059154929577465

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4839232534170151
AUROC: 0.5821233154321613
AUPRC: 0.19948853959933022
Sensitivity: 0.5851318944844125
Specificity: 0.5335680751173709
Threshold: 0.3
Accuracy:  0.5420102080879466


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      24, 0.4559
  Epoch with best model Test AUROC:     44, 0.5821
  Epoch with best model Test Accuracy:  19, 0.5887

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   24, 0.4559
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0024.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.36it/s]
Loss: 0.4501290529966354
AUROC: 0.5681875626259556
AUPRC: 0.19768096412552966
Sensitivity: 0.5935251798561151
Specificity: 0.5009389671361503
Threshold: 0.21
Accuracy:  0.5160973694542599
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.5681875626259556
best_model_val_test_auprc: 0.19768096412552966

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  44, 0.5821
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_acd313eb_0044.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4839232534170151
AUROC: 0.5821233154321613
AUPRC: 0.19948853959933022
Sensitivity: 0.5851318944844125
Specificity: 0.5335680751173709
Threshold: 0.3
Accuracy:  0.5420102080879466
best_model_auroc_test_auroc: 0.5821233154321613
best_model_auroc_test_auprc: 0.19948853959933022

Total Processing Time: 2871.6900 sec
In [103]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=True,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           True
  use_eeg:           False
  use_ecg:           True
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (abpResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (abpFc): Linear(in_features=2814, out_features=32, bias=True)
  (ecgResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (ecgFc): Linear(in_features=2814, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=64, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.45it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
[2024-05-04 12:32:23.128131] Completed epoch 0 with training loss 0.42990822, validation loss 0.42385453
Validation loss improved to 0.42385453. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
[2024-05-04 12:33:24.268093] Completed epoch 1 with training loss 0.40044278, validation loss 0.43202692
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
[2024-05-04 12:34:24.900139] Completed epoch 2 with training loss 0.39713749, validation loss 0.42221203
Validation loss improved to 0.42221203. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
[2024-05-04 12:35:25.459633] Completed epoch 3 with training loss 0.39583826, validation loss 0.43072185
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 12:36:26.383787] Completed epoch 4 with training loss 0.39442295, validation loss 0.43578592
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.09it/s]
[2024-05-04 12:37:28.027357] Completed epoch 5 with training loss 0.39588886, validation loss 0.41816640
Validation loss improved to 0.41816640. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.45it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
[2024-05-04 12:38:30.024935] Completed epoch 6 with training loss 0.39452562, validation loss 0.43458551
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 12:39:30.725361] Completed epoch 7 with training loss 0.39572442, validation loss 0.41340914
Validation loss improved to 0.41340914. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
[2024-05-04 12:40:31.278828] Completed epoch 8 with training loss 0.39528391, validation loss 0.41634074
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
[2024-05-04 12:41:31.907037] Completed epoch 9 with training loss 0.39544171, validation loss 0.43029299
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 12:42:32.114892] Completed epoch 10 with training loss 0.39472699, validation loss 0.43333143
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
[2024-05-04 12:43:32.862244] Completed epoch 11 with training loss 0.39432180, validation loss 0.43215197
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
[2024-05-04 12:44:33.330187] Completed epoch 12 with training loss 0.39500561, validation loss 0.41866186
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
[2024-05-04 12:45:34.769097] Completed epoch 13 with training loss 0.39564204, validation loss 0.42036846
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 12:46:34.886745] Completed epoch 14 with training loss 0.39564127, validation loss 0.42371622
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 12:47:35.266985] Completed epoch 15 with training loss 0.39529240, validation loss 0.43331838
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
[2024-05-04 12:48:35.965861] Completed epoch 16 with training loss 0.39400485, validation loss 0.41381964
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 12:49:36.631262] Completed epoch 17 with training loss 0.39618725, validation loss 0.43325475
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
[2024-05-04 12:50:39.171249] Completed epoch 18 with training loss 0.39436650, validation loss 0.41714123
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
[2024-05-04 12:51:40.655883] Completed epoch 19 with training loss 0.39487189, validation loss 0.42676136
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 12:52:41.983243] Completed epoch 20 with training loss 0.39468417, validation loss 0.41032737
Validation loss improved to 0.41032737. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
[2024-05-04 12:53:44.640314] Completed epoch 21 with training loss 0.39482909, validation loss 0.43139836
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:57<00:00,  1.38it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 12:54:48.733696] Completed epoch 22 with training loss 0.39446059, validation loss 0.41064724
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.13it/s]
[2024-05-04 12:55:48.960181] Completed epoch 23 with training loss 0.39502844, validation loss 0.42783123
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 12:56:48.537832] Completed epoch 24 with training loss 0.39471519, validation loss 0.41252127
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.02it/s]
[2024-05-04 12:57:48.893906] Completed epoch 25 with training loss 0.39503255, validation loss 0.42434493
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 12:58:48.361787] Completed epoch 26 with training loss 0.39477363, validation loss 0.41077262
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 12:59:47.984634] Completed epoch 27 with training loss 0.39370289, validation loss 0.41842821
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 13:00:47.672797] Completed epoch 28 with training loss 0.39559832, validation loss 0.40808734
Validation loss improved to 0.40808734. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.02it/s]
[2024-05-04 13:01:48.294685] Completed epoch 29 with training loss 0.39464903, validation loss 0.41122970
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 13:02:47.710429] Completed epoch 30 with training loss 0.39419007, validation loss 0.42509285
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 13:03:49.255071] Completed epoch 31 with training loss 0.39426437, validation loss 0.40870363
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 13:04:51.218770] Completed epoch 32 with training loss 0.39446050, validation loss 0.42076844
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 13:05:53.129480] Completed epoch 33 with training loss 0.39450708, validation loss 0.41837978
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.45it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 13:06:54.601811] Completed epoch 34 with training loss 0.39589062, validation loss 0.42847520
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 13:07:55.015443] Completed epoch 35 with training loss 0.39408118, validation loss 0.41503981
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 13:08:55.992641] Completed epoch 36 with training loss 0.39653292, validation loss 0.40648612
Validation loss improved to 0.40648612. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.03it/s]
[2024-05-04 13:09:58.947133] Completed epoch 37 with training loss 0.39451140, validation loss 0.40494356
Validation loss improved to 0.40494356. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:56<00:00,  1.42it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 13:11:01.657049] Completed epoch 38 with training loss 0.39379185, validation loss 0.40572450
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:12:02.237407] Completed epoch 39 with training loss 0.39429960, validation loss 0.41264153
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 13:13:01.968653] Completed epoch 40 with training loss 0.39549002, validation loss 0.41184765
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 13:14:02.174473] Completed epoch 41 with training loss 0.39517283, validation loss 0.40619138
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:52<00:00,  1.52it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
[2024-05-04 13:15:00.936814] Completed epoch 42 with training loss 0.39395577, validation loss 0.40646172
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.54it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 13:15:58.795262] Completed epoch 43 with training loss 0.39358392, validation loss 0.41426882
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:52<00:00,  1.53it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 13:16:57.351661] Completed epoch 44 with training loss 0.39476168, validation loss 0.41430280
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:52<00:00,  1.53it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 13:17:55.694433] Completed epoch 45 with training loss 0.39531654, validation loss 0.40955642
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.55it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 13:18:53.795072] Completed epoch 46 with training loss 0.39526796, validation loss 0.40534869
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.55it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:19:51.675533] Completed epoch 47 with training loss 0.39517456, validation loss 0.41618031
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.54it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 13:20:49.688273] Completed epoch 48 with training loss 0.39537376, validation loss 0.41084892
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:52<00:00,  1.53it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 13:21:48.258490] Completed epoch 49 with training loss 0.39435822, validation loss 0.40420374
Validation loss improved to 0.40420374. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.56it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:22:45.675190] Completed epoch 50 with training loss 0.39324829, validation loss 0.40713066
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:23:42.399321] Completed epoch 51 with training loss 0.39604706, validation loss 0.40491366
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 13:24:39.205692] Completed epoch 52 with training loss 0.39514059, validation loss 0.40750244
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 13:25:35.932328] Completed epoch 53 with training loss 0.39509472, validation loss 0.42393565
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.59it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:26:32.673341] Completed epoch 54 with training loss 0.39562276, validation loss 0.40314892
Validation loss improved to 0.40314892. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:27:29.563284] Completed epoch 55 with training loss 0.39642161, validation loss 0.41571674
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.56it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 13:28:27.056022] Completed epoch 56 with training loss 0.39319965, validation loss 0.42977324
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:51<00:00,  1.56it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:29:24.572126] Completed epoch 57 with training loss 0.39569223, validation loss 0.40521321
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 13:30:21.412378] Completed epoch 58 with training loss 0.39551175, validation loss 0.41345382
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:31:18.144427] Completed epoch 59 with training loss 0.39577684, validation loss 0.40907747
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:32:15.101363] Completed epoch 60 with training loss 0.39454740, validation loss 0.40607777
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 13:33:11.912296] Completed epoch 61 with training loss 0.39496523, validation loss 0.42541215
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.59it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:34:08.611203] Completed epoch 62 with training loss 0.39452264, validation loss 0.41521499
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:35:05.393499] Completed epoch 63 with training loss 0.39300355, validation loss 0.42527863
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.57it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 13:36:02.535524] Completed epoch 64 with training loss 0.39377552, validation loss 0.42472693
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 13:36:59.490965] Completed epoch 65 with training loss 0.39410228, validation loss 0.40559322
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.57it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 13:37:56.542595] Completed epoch 66 with training loss 0.39430875, validation loss 0.40970370
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 13:38:53.500535] Completed epoch 67 with training loss 0.39598480, validation loss 0.40739641
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 13:39:50.456510] Completed epoch 68 with training loss 0.39474955, validation loss 0.41153878
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.57it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 13:40:47.514542] Completed epoch 69 with training loss 0.39549679, validation loss 0.42796493
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.57it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:41:44.646848] Completed epoch 70 with training loss 0.39532083, validation loss 0.41105229
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 13:42:41.342271] Completed epoch 71 with training loss 0.39542618, validation loss 0.40510035
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 13:43:38.072791] Completed epoch 72 with training loss 0.39623436, validation loss 0.41279742
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 13:44:34.987531] Completed epoch 73 with training loss 0.39477703, validation loss 0.42195055
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:50<00:00,  1.58it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 13:45:31.877429] Completed epoch 74 with training loss 0.39611220, validation loss 0.41143170
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   54, 0.4031
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.42516899960381643
AUROC: 0.6979536088543508
AUPRC: 0.3236490832884923
Sensitivity: 0.6596491228070176
Specificity: 0.6496644295302013
Threshold: 0.12
Accuracy:  0.6512676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.424166539311409
AUROC: 0.7314134607806713
AUPRC: 0.350813371353264
Sensitivity: 0.6822541966426858
Specificity: 0.6610328638497652
Threshold: 0.12
Accuracy:  0.6645072634471928

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.43143545516899656
AUROC: 0.6985211350523961
AUPRC: 0.33166926295329513
Sensitivity: 0.6736842105263158
Specificity: 0.6342281879194631
Threshold: 0.1
Accuracy:  0.6405633802816901

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.429884022846818
AUROC: 0.7332363686515577
AUPRC: 0.35697555723443286
Sensitivity: 0.6954436450839329
Specificity: 0.6469483568075117
Threshold: 0.1
Accuracy:  0.6548881036513545

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.42167974582740236
AUROC: 0.698572942423172
AUPRC: 0.33512408103555513
Sensitivity: 0.631578947368421
Specificity: 0.6704697986577182
Threshold: 0.12
Accuracy:  0.6642253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4201565865427256
AUROC: 0.7341453597685231
AUPRC: 0.3605923264606771
Sensitivity: 0.6546762589928058
Specificity: 0.6866197183098591
Threshold: 0.12
Accuracy:  0.6813898704358068

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.43080183225018637
AUROC: 0.6988013658306841
AUPRC: 0.33760119997169935
Sensitivity: 0.6350877192982456
Specificity: 0.6677852348993288
Threshold: 0.1
Accuracy:  0.6625352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4311380658298731
AUROC: 0.73496808187253
AUPRC: 0.3630011735463407
Sensitivity: 0.6618705035971223
Specificity: 0.6833333333333333
Threshold: 0.1
Accuracy:  0.6798193953670986

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.4357371223824365
AUROC: 0.6987660426233369
AUPRC: 0.33888225286244694
Sensitivity: 0.6596491228070176
Specificity: 0.6483221476510067
Threshold: 0.09
Accuracy:  0.6501408450704226

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.43659796863794326
AUROC: 0.73500298352867
AUPRC: 0.3630384239311863
Sensitivity: 0.6918465227817746
Specificity: 0.6563380281690141
Threshold: 0.09
Accuracy:  0.6621515508441304

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.41785965647016254
AUROC: 0.698864947603909
AUPRC: 0.3376515957439056
Sensitivity: 0.6666666666666666
Specificity: 0.6328859060402685
Threshold: 0.12
Accuracy:  0.6383098591549295

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.4162864189594984
AUROC: 0.7353297643575281
AUPRC: 0.36203775416516254
Sensitivity: 0.7050359712230215
Specificity: 0.64037558685446
Threshold: 0.12
Accuracy:  0.6509619159795839

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.4344810140984399
AUROC: 0.6980360296714943
AUPRC: 0.3393530780324124
Sensitivity: 0.6771929824561403
Specificity: 0.6134228187919463
Threshold: 0.09
Accuracy:  0.6236619718309859

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4344048578292131
AUROC: 0.7340391067427747
AUPRC: 0.3631164099520957
Sensitivity: 0.6330935251798561
Specificity: 0.7145539906103286
Threshold: 0.1
Accuracy:  0.7012171181782489

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.412591638309615
AUROC: 0.6981372895325562
AUPRC: 0.3363604978066563
Sensitivity: 0.6385964912280702
Specificity: 0.6657718120805369
Threshold: 0.15
Accuracy:  0.6614084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.411873522028327
AUROC: 0.7347949809166752
AUPRC: 0.3611168272554948
Sensitivity: 0.6738609112709832
Specificity: 0.6816901408450704
Threshold: 0.15
Accuracy:  0.6804083235178642

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.4151577779224941
AUROC: 0.6976733780760627
AUPRC: 0.3372137725536177
Sensitivity: 0.6385964912280702
Specificity: 0.6644295302013423
Threshold: 0.14
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.4141704872250557
AUROC: 0.7342973508517131
AUPRC: 0.3623767066445729
Sensitivity: 0.6750599520383693
Specificity: 0.6748826291079812
Threshold: 0.14
Accuracy:  0.6749116607773852

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
Loss: 0.4322431577103479
AUROC: 0.6972671611915695
AUPRC: 0.338352234285441
Sensitivity: 0.6385964912280702
Specificity: 0.661744966442953
Threshold: 0.1
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4315855897963047
AUROC: 0.7333809009130724
AUPRC: 0.3612176200575663
Sensitivity: 0.6738609112709832
Specificity: 0.6793427230046948
Threshold: 0.1
Accuracy:  0.6784452296819788

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.4329383692571095
AUROC: 0.6971317555634051
AUPRC: 0.34168269618490626
Sensitivity: 0.6421052631578947
Specificity: 0.6624161073825503
Threshold: 0.1
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4329654797911644
AUROC: 0.7330062710395064
AUPRC: 0.3604324697568746
Sensitivity: 0.6762589928057554
Specificity: 0.6751173708920187
Threshold: 0.1
Accuracy:  0.6753042795445622

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.4304905853101185
AUROC: 0.6972165312610384
AUPRC: 0.3400685155357342
Sensitivity: 0.6456140350877193
Specificity: 0.6536912751677852
Threshold: 0.1
Accuracy:  0.652394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.22it/s]
Loss: 0.43110031709074975
AUROC: 0.7329394231093997
AUPRC: 0.3599711031023385
Sensitivity: 0.6834532374100719
Specificity: 0.6664319248826291
Threshold: 0.1
Accuracy:  0.6692186886533177

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.41855697333812714
AUROC: 0.6973225008830801
AUPRC: 0.340074239690625
Sensitivity: 0.6175438596491228
Specificity: 0.6798657718120805
Threshold: 0.13
Accuracy:  0.6698591549295775

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.41731283739209174
AUROC: 0.7332989946071312
AUPRC: 0.35957768209511604
Sensitivity: 0.6534772182254197
Specificity: 0.6997652582159625
Threshold: 0.13
Accuracy:  0.6921868865331763

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.4200966102736337
AUROC: 0.6971741434122217
AUPRC: 0.3411755622026948
Sensitivity: 0.6456140350877193
Specificity: 0.6583892617449665
Threshold: 0.12
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.4209831949323416
AUROC: 0.7328131860708617
AUPRC: 0.3597854220836664
Sensitivity: 0.6738609112709832
Specificity: 0.6713615023474179
Threshold: 0.12
Accuracy:  0.6717707106399686

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.42445579171180725
AUROC: 0.6969881078535264
AUPRC: 0.34102244411725285
Sensitivity: 0.6631578947368421
Specificity: 0.6409395973154363
Threshold: 0.11
Accuracy:  0.6445070422535212

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.42504341937601564
AUROC: 0.7322961349230475
AUPRC: 0.359154420658702
Sensitivity: 0.6966426858513189
Specificity: 0.6511737089201878
Threshold: 0.11
Accuracy:  0.6586179819395367

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.43336127059800283
AUROC: 0.6970045920169552
AUPRC: 0.3428872960789312
Sensitivity: 0.6631578947368421
Specificity: 0.6268456375838927
Threshold: 0.09
Accuracy:  0.6326760563380281

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.4354122646152973
AUROC: 0.7320836288715508
AUPRC: 0.35875275661840017
Sensitivity: 0.7038369304556354
Specificity: 0.64037558685446
Threshold: 0.09
Accuracy:  0.6507656065959952

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.41303721496037077
AUROC: 0.697654539032144
AUPRC: 0.33991507535923954
Sensitivity: 0.6701754385964912
Specificity: 0.6187919463087248
Threshold: 0.13
Accuracy:  0.6270422535211267

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.4129066079854965
AUROC: 0.7328632868353204
AUPRC: 0.3599966660628434
Sensitivity: 0.6498800959232613
Specificity: 0.7016431924882629
Threshold: 0.14
Accuracy:  0.693168433451119

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.43248569113867624
AUROC: 0.6972542093488755
AUPRC: 0.34316016770655106
Sensitivity: 0.6771929824561403
Specificity: 0.6134228187919463
Threshold: 0.09
Accuracy:  0.6236619718309859

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.43401174433529377
AUROC: 0.731881537023902
AUPRC: 0.35893035820898667
Sensitivity: 0.7146282973621103
Specificity: 0.6281690140845071
Threshold: 0.09
Accuracy:  0.6423243031016883

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.416797793337277
AUROC: 0.697555634051572
AUPRC: 0.338174889281748
Sensitivity: 0.631578947368421
Specificity: 0.6624161073825503
Threshold: 0.12
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.22it/s]
Loss: 0.41689038164913655
AUROC: 0.7322651737764718
AUPRC: 0.3584352782580703
Sensitivity: 0.670263788968825
Specificity: 0.67981220657277
Threshold: 0.12
Accuracy:  0.6782489202983902

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.4269751182624272
AUROC: 0.6972212410220181
AUPRC: 0.3366290154137916
Sensitivity: 0.6736842105263158
Specificity: 0.6167785234899329
Threshold: 0.1
Accuracy:  0.6259154929577465

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.42786239832639694
AUROC: 0.7316330034563898
AUPRC: 0.35711030930736776
Sensitivity: 0.7122302158273381
Specificity: 0.6335680751173709
Threshold: 0.1
Accuracy:  0.6464468001570475

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4100841645683561
AUROC: 0.6979277051689625
AUPRC: 0.3369916732737553
Sensitivity: 0.6421052631578947
Specificity: 0.6570469798657718
Threshold: 0.15
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.40953056141734123
AUROC: 0.7324306751781673
AUPRC: 0.3588020523753073
Sensitivity: 0.6762589928057554
Specificity: 0.6730046948356807
Threshold: 0.15
Accuracy:  0.6735374950922655

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.431536927819252
AUROC: 0.6963617096432356
AUPRC: 0.3381873003262184
Sensitivity: 0.6385964912280702
Specificity: 0.6543624161073825
Threshold: 0.1
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4340718943625689
AUROC: 0.7305637180396528
AUPRC: 0.3567803949316921
Sensitivity: 0.6630695443645084
Specificity: 0.6704225352112676
Threshold: 0.1
Accuracy:  0.6692186886533177

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.41064727306365967
AUROC: 0.6984551983986812
AUPRC: 0.3369775937963951
Sensitivity: 0.6701754385964912
Specificity: 0.6241610738255033
Threshold: 0.12
Accuracy:  0.6315492957746479

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.41052105836570263
AUROC: 0.7326642911023293
AUPRC: 0.3592462820503032
Sensitivity: 0.6438848920863309
Specificity: 0.7037558685446009
Threshold: 0.13
Accuracy:  0.6939536709854731

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.42874751559325625
AUROC: 0.6974555516307547
AUPRC: 0.3352840900502655
Sensitivity: 0.6771929824561403
Specificity: 0.6154362416107383
Threshold: 0.09
Accuracy:  0.6253521126760564

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.429956978559494
AUROC: 0.7313426723410005
AUPRC: 0.3560527965254835
Sensitivity: 0.7134292565947242
Specificity: 0.6298122065727699
Threshold: 0.09
Accuracy:  0.6435021594032194

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.4117537204708372
AUROC: 0.6980148357470859
AUPRC: 0.33830081424303593
Sensitivity: 0.6526315789473685
Specificity: 0.6523489932885906
Threshold: 0.13
Accuracy:  0.652394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.4126865603029728
AUROC: 0.7320300097949809
AUPRC: 0.35816243886621224
Sensitivity: 0.6798561151079137
Specificity: 0.6669014084507042
Threshold: 0.13
Accuracy:  0.6690223792697291

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.42468835626329693
AUROC: 0.6982515012363122
AUPRC: 0.3358474581247306
Sensitivity: 0.6421052631578947
Specificity: 0.6604026845637584
Threshold: 0.1
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.42520608603954313
AUROC: 0.7323003568975806
AUPRC: 0.3583495400596563
Sensitivity: 0.6642685851318945
Specificity: 0.6805164319248826
Threshold: 0.1
Accuracy:  0.6778563015312132

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
Loss: 0.4105945144380842
AUROC: 0.6979536088543506
AUPRC: 0.33524044035874634
Sensitivity: 0.6350877192982456
Specificity: 0.661744966442953
Threshold: 0.13
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.40976210683584213
AUROC: 0.7319775165782867
AUPRC: 0.3590248899167435
Sensitivity: 0.6606714628297362
Specificity: 0.6814553990610329
Threshold: 0.13
Accuracy:  0.6780526109148017

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
Loss: 0.41747709044388365
AUROC: 0.6978311550688803
AUPRC: 0.3364854729442368
Sensitivity: 0.6666666666666666
Specificity: 0.6208053691275168
Threshold: 0.11
Accuracy:  0.6281690140845071

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.41761021502316
AUROC: 0.7321157158780018
AUPRC: 0.3585013685277081
Sensitivity: 0.7134292565947242
Specificity: 0.6333333333333333
Threshold: 0.11
Accuracy:  0.6464468001570475

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
Loss: 0.4083946368524006
AUROC: 0.6982762274814552
AUPRC: 0.333374125691733
Sensitivity: 0.6701754385964912
Specificity: 0.6194630872483221
Threshold: 0.16
Accuracy:  0.6276056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.05it/s]
Loss: 0.40740617290139197
AUROC: 0.73268779342723
AUPRC: 0.357737409663768
Sensitivity: 0.6474820143884892
Specificity: 0.6976525821596244
Threshold: 0.17
Accuracy:  0.6894385551629368

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
Loss: 0.4118682039635522
AUROC: 0.6997786412339574
AUPRC: 0.3333332451844107
Sensitivity: 0.6421052631578947
Specificity: 0.6590604026845638
Threshold: 0.12
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.07it/s]
Loss: 0.411039849370718
AUROC: 0.7343744722531833
AUPRC: 0.35986491174628293
Sensitivity: 0.6762589928057554
Specificity: 0.6748826291079812
Threshold: 0.12
Accuracy:  0.6751079701609737

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.42469225185258047
AUROC: 0.6974214058636524
AUPRC: 0.3379067095863756
Sensitivity: 0.6035087719298246
Specificity: 0.6818791946308724
Threshold: 0.1
Accuracy:  0.6692957746478874

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.17it/s]
Loss: 0.4247471481561661
AUROC: 0.731089494601502
AUPRC: 0.35763100796915576
Sensitivity: 0.63189448441247
Specificity: 0.7089201877934272
Threshold: 0.1
Accuracy:  0.6963093835885356

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
Loss: 0.40798055274145945
AUROC: 0.700063581773225
AUPRC: 0.333670907373434
Sensitivity: 0.6385964912280702
Specificity: 0.6523489932885906
Threshold: 0.12
Accuracy:  0.6501408450704226

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.15it/s]
Loss: 0.40605787113308905
AUROC: 0.735655841523964
AUPRC: 0.3614030229906491
Sensitivity: 0.6822541966426858
Specificity: 0.6697183098591549
Threshold: 0.12
Accuracy:  0.6717707106399686

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.95it/s]
Loss: 0.4200581418616431
AUROC: 0.697885317320146
AUPRC: 0.3369019070862636
Sensitivity: 0.6210526315789474
Specificity: 0.6718120805369128
Threshold: 0.11
Accuracy:  0.663661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.42027950286865234
AUROC: 0.7316805710361288
AUPRC: 0.35664373695017554
Sensitivity: 0.6510791366906474
Specificity: 0.6946009389671362
Threshold: 0.11
Accuracy:  0.6874754613270514

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.07it/s]
Loss: 0.4190094641276768
AUROC: 0.6999222889438361
AUPRC: 0.3320834960537493
Sensitivity: 0.6350877192982456
Specificity: 0.6590604026845638
Threshold: 0.11
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.14it/s]
Loss: 0.4172797318547964
AUROC: 0.7348701320633634
AUPRC: 0.3610898621904549
Sensitivity: 0.6726618705035972
Specificity: 0.676056338028169
Threshold: 0.11
Accuracy:  0.6755005889281508

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.95it/s]
Loss: 0.4286795194659914
AUROC: 0.6991098551748498
AUPRC: 0.33000543614029554
Sensitivity: 0.6912280701754386
Specificity: 0.6100671140939598
Threshold: 0.09
Accuracy:  0.6230985915492958

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.42841819636523726
AUROC: 0.733546402314768
AUPRC: 0.3594787354682997
Sensitivity: 0.6354916067146283
Specificity: 0.719718309859155
Threshold: 0.1
Accuracy:  0.7059285433843737

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.4156697520187923
AUROC: 0.6985517484987637
AUPRC: 0.3390168426377773
Sensitivity: 0.6596491228070176
Specificity: 0.6442953020134228
Threshold: 0.1
Accuracy:  0.6467605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.08it/s]
Loss: 0.4142110697925091
AUROC: 0.7328241632046475
AUPRC: 0.36131425688732954
Sensitivity: 0.6930455635491607
Specificity: 0.6553990610328638
Threshold: 0.1
Accuracy:  0.6615626226933647

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.99it/s]
Loss: 0.40675834247044157
AUROC: 0.6996514776875074
AUPRC: 0.3446572228927572
Sensitivity: 0.6421052631578947
Specificity: 0.661744966442953
Threshold: 0.13
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.40324376448988913
AUROC: 0.7349210772227289
AUPRC: 0.3613783248489103
Sensitivity: 0.6738609112709832
Specificity: 0.67981220657277
Threshold: 0.13
Accuracy:  0.6788378484491558

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.11it/s]
Loss: 0.40509519832474844
AUROC: 0.6994795714117509
AUPRC: 0.3407106249298081
Sensitivity: 0.6526315789473685
Specificity: 0.6503355704697986
Threshold: 0.13
Accuracy:  0.6507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.01it/s]
Loss: 0.4030648056417704
AUROC: 0.735632902129001
AUPRC: 0.361452160355802
Sensitivity: 0.6894484412470024
Specificity: 0.6603286384976526
Threshold: 0.13
Accuracy:  0.6650961915979584

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.11it/s]
Loss: 0.4049029690878732
AUROC: 0.6990085953137877
AUPRC: 0.33267238499591784
Sensitivity: 0.6350877192982456
Specificity: 0.6677852348993288
Threshold: 0.14
Accuracy:  0.6625352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.4031966309994459
AUROC: 0.7352672791344389
AUPRC: 0.3619490582286831
Sensitivity: 0.6654676258992805
Specificity: 0.6863849765258216
Threshold: 0.14
Accuracy:  0.6829603455045151

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
Loss: 0.41235540168625967
AUROC: 0.699043918521135
AUPRC: 0.3344085445655934
Sensitivity: 0.6701754385964912
Specificity: 0.6369127516778523
Threshold: 0.12
Accuracy:  0.6422535211267606

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.4104148641228676
AUROC: 0.7353525630200065
AUPRC: 0.3620490857633846
Sensitivity: 0.7002398081534772
Specificity: 0.6450704225352113
Threshold: 0.12
Accuracy:  0.6541028661170004

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.11it/s]
Loss: 0.41198415628501345
AUROC: 0.6979583186153302
AUPRC: 0.34017355311094594
Sensitivity: 0.6736842105263158
Specificity: 0.6248322147651006
Threshold: 0.13
Accuracy:  0.6326760563380281

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.22it/s]
Loss: 0.40956606566905973
AUROC: 0.7328798932684838
AUPRC: 0.3632833651723515
Sensitivity: 0.7062350119904077
Specificity: 0.6345070422535212
Threshold: 0.13
Accuracy:  0.646250490773459

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.40594981823648724
AUROC: 0.7003885552808196
AUPRC: 0.33372827745386574
Sensitivity: 0.6736842105263158
Specificity: 0.636241610738255
Threshold: 0.12
Accuracy:  0.6422535211267606

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.12it/s]
Loss: 0.4004561919718981
AUROC: 0.7368294097116672
AUPRC: 0.3634377954798838
Sensitivity: 0.697841726618705
Specificity: 0.6490610328638498
Threshold: 0.12
Accuracy:  0.6570475068708285

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.09it/s]
Loss: 0.406654845391001
AUROC: 0.6988696573648887
AUPRC: 0.33472583711162734
Sensitivity: 0.6421052631578947
Specificity: 0.6570469798657718
Threshold: 0.13
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.40335120894014836
AUROC: 0.7344665112980039
AUPRC: 0.3607714618938144
Sensitivity: 0.6798561151079137
Specificity: 0.6697183098591549
Threshold: 0.13
Accuracy:  0.6713780918727915

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.4146354453904288
AUROC: 0.6984151654303545
AUPRC: 0.3317078307818105
Sensitivity: 0.6210526315789474
Specificity: 0.6785234899328859
Threshold: 0.12
Accuracy:  0.6692957746478874

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.12it/s]
Loss: 0.41404636614024637
AUROC: 0.7338486956913343
AUPRC: 0.3599816153223334
Sensitivity: 0.6438848920863309
Specificity: 0.6990610328638498
Threshold: 0.12
Accuracy:  0.6900274833137024

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
Loss: 0.41396149567195345
AUROC: 0.6993853761921582
AUPRC: 0.3365348847229941
Sensitivity: 0.6456140350877193
Specificity: 0.6583892617449665
Threshold: 0.11
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.4123324085026979
AUROC: 0.7344940948649532
AUPRC: 0.3612468859158913
Sensitivity: 0.6774580335731415
Specificity: 0.6715962441314554
Threshold: 0.11
Accuracy:  0.6725559481743227

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0045.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.41065467255456106
AUROC: 0.6999175791828565
AUPRC: 0.33470072018389674
Sensitivity: 0.6526315789473685
Specificity: 0.6536912751677852
Threshold: 0.19
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.40299478024244306
AUROC: 0.7370101102216818
AUPRC: 0.3639633024678516
Sensitivity: 0.6858513189448441
Specificity: 0.6669014084507042
Threshold: 0.19
Accuracy:  0.6700039261876718

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0046.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.4059517277138574
AUROC: 0.6979865771812082
AUPRC: 0.3363069092191628
Sensitivity: 0.6701754385964912
Specificity: 0.6308724832214765
Threshold: 0.15
Accuracy:  0.6371830985915493

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.15it/s]
Loss: 0.4028975896537304
AUROC: 0.7345861339097736
AUPRC: 0.3611132228959439
Sensitivity: 0.6990407673860911
Specificity: 0.6460093896713615
Threshold: 0.15
Accuracy:  0.654691794267766

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0047.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.41541127434798647
AUROC: 0.6986459437183562
AUPRC: 0.3305921379979886
Sensitivity: 0.6596491228070176
Specificity: 0.6449664429530201
Threshold: 0.21
Accuracy:  0.6473239436619719

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.4050541970878839
AUROC: 0.7364750453158599
AUPRC: 0.36157773288401385
Sensitivity: 0.658273381294964
Specificity: 0.6805164319248826
Threshold: 0.22
Accuracy:  0.6768747546132705

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0048.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.41069149332387106
AUROC: 0.698624749793948
AUPRC: 0.33740820477596983
Sensitivity: 0.6210526315789474
Specificity: 0.6785234899328859
Threshold: 0.14
Accuracy:  0.6692957746478874

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.14it/s]
Loss: 0.4086889743804932
AUROC: 0.7330349804663312
AUPRC: 0.36008548215904856
Sensitivity: 0.6438848920863309
Specificity: 0.6976525821596244
Threshold: 0.14
Accuracy:  0.6888496270121712

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0049.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.40421420548643383
AUROC: 0.6981561285764748
AUPRC: 0.3426738805028874
Sensitivity: 0.6280701754385964
Specificity: 0.6664429530201342
Threshold: 0.16
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.10it/s]
Loss: 0.3996091324836016
AUROC: 0.7339303205323066
AUPRC: 0.36300315244783693
Sensitivity: 0.6666666666666666
Specificity: 0.6859154929577465
Threshold: 0.16
Accuracy:  0.6827640361209266

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0050.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4060478040150234
AUROC: 0.698165548098434
AUPRC: 0.3365190000989745
Sensitivity: 0.6350877192982456
Specificity: 0.6610738255033557
Threshold: 0.14
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.14it/s]
Loss: 0.40464973971247675
AUROC: 0.7347142004706095
AUPRC: 0.3633180868774246
Sensitivity: 0.6690647482014388
Specificity: 0.6800469483568075
Threshold: 0.14
Accuracy:  0.6782489202983902

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0051.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.06it/s]
Loss: 0.40396118802683695
AUROC: 0.6994913458141999
AUPRC: 0.34166135737313885
Sensitivity: 0.6491228070175439
Specificity: 0.640268456375839
Threshold: 0.16
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.14it/s]
Loss: 0.3984353173524141
AUROC: 0.7367829679918037
AUPRC: 0.3654008335292344
Sensitivity: 0.6942446043165468
Specificity: 0.6539906103286385
Threshold: 0.16
Accuracy:  0.660581075775422

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0052.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
Loss: 0.40672161536557333
AUROC: 0.6990085953137878
AUPRC: 0.3376543209358055
Sensitivity: 0.6175438596491228
Specificity: 0.6751677852348993
Threshold: 0.14
Accuracy:  0.6659154929577464

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.40506565272808076
AUROC: 0.7345057756611612
AUPRC: 0.362075448378095
Sensitivity: 0.6498800959232613
Specificity: 0.6934272300469484
Threshold: 0.14
Accuracy:  0.6862976050255202

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0053.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.42350934445858
AUROC: 0.6988578829624397
AUPRC: 0.336419807547155
Sensitivity: 0.6631578947368421
Specificity: 0.636241610738255
Threshold: 0.09
Accuracy:  0.6405633802816901

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.4229082692414522
AUROC: 0.7350387295797165
AUPRC: 0.36272007178178045
Sensitivity: 0.6990407673860911
Specificity: 0.6488262910798122
Threshold: 0.09
Accuracy:  0.6570475068708285

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0054.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.00it/s]
Loss: 0.40409958149705616
AUROC: 0.6992346638408101
AUPRC: 0.33578682336978644
Sensitivity: 0.6456140350877193
Specificity: 0.6577181208053692
Threshold: 0.15
Accuracy:  0.655774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.39954023621976376
AUROC: 0.7364418324495333
AUPRC: 0.36268438091256794
Sensitivity: 0.6678657074340527
Specificity: 0.6732394366197183
Threshold: 0.15
Accuracy:  0.6723596387907342

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0055.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.10it/s]
Loss: 0.41670200654438566
AUROC: 0.6993806664311786
AUPRC: 0.33951406765617165
Sensitivity: 0.6526315789473685
Specificity: 0.6483221476510067
Threshold: 0.11
Accuracy:  0.6490140845070422

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.41583111844956877
AUROC: 0.7345879634320713
AUPRC: 0.36061676511368684
Sensitivity: 0.6894484412470024
Specificity: 0.6605633802816901
Threshold: 0.11
Accuracy:  0.6652925009815469

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0056.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.03it/s]
Loss: 0.42868456670216154
AUROC: 0.6988955610502767
AUPRC: 0.32840928151225357
Sensitivity: 0.6456140350877193
Specificity: 0.6597315436241611
Threshold: 0.09
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.4303028844296932
AUROC: 0.7320950282027898
AUPRC: 0.3575486122191702
Sensitivity: 0.6606714628297362
Specificity: 0.6793427230046948
Threshold: 0.09
Accuracy:  0.6762858264625049

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0057.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4056484124490193
AUROC: 0.6984811020840693
AUPRC: 0.3344990178665517
Sensitivity: 0.6385964912280702
Specificity: 0.6557046979865772
Threshold: 0.14
Accuracy:  0.6529577464788733

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.04it/s]
Loss: 0.40181047916412355
AUROC: 0.7352460285292893
AUPRC: 0.36383473412234274
Sensitivity: 0.6810551558752997
Specificity: 0.6744131455399061
Threshold: 0.14
Accuracy:  0.6755005889281508

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0058.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.41109334783894674
AUROC: 0.6975838926174498
AUPRC: 0.3321463523759763
Sensitivity: 0.6175438596491228
Specificity: 0.6818791946308724
Threshold: 0.14
Accuracy:  0.6715492957746478

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.14it/s]
Loss: 0.4125492885708809
AUROC: 0.7318775965143379
AUPRC: 0.35763722638602824
Sensitivity: 0.6354916067146283
Specificity: 0.7065727699530516
Threshold: 0.14
Accuracy:  0.6949352179034158

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0059.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.4095330515078136
AUROC: 0.6976616036736135
AUPRC: 0.33534904622016065
Sensitivity: 0.6807017543859649
Specificity: 0.6100671140939598
Threshold: 0.12
Accuracy:  0.6214084507042253

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.40730957575142385
AUROC: 0.7352723455038785
AUPRC: 0.3630242914196528
Sensitivity: 0.6426858513189448
Specificity: 0.7023474178403756
Threshold: 0.13
Accuracy:  0.6925795053003534

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0060.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
Loss: 0.40532316054616657
AUROC: 0.6987189450135406
AUPRC: 0.3376548056084592
Sensitivity: 0.6701754385964912
Specificity: 0.6288590604026846
Threshold: 0.15
Accuracy:  0.6354929577464788

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.06it/s]
Loss: 0.40054150596261023
AUROC: 0.7370057475146643
AUPRC: 0.3649162968839251
Sensitivity: 0.6546762589928058
Specificity: 0.6936619718309859
Threshold: 0.16
Accuracy:  0.6872791519434629

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0061.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.42646001279354095
AUROC: 0.6977746379371247
AUPRC: 0.33410394207899574
Sensitivity: 0.624561403508772
Specificity: 0.674496644295302
Threshold: 0.1
Accuracy:  0.6664788732394367

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.06it/s]
Loss: 0.42716101855039595
AUROC: 0.7323214667702459
AUPRC: 0.3597912324611164
Sensitivity: 0.6462829736211031
Specificity: 0.6974178403755869
Threshold: 0.1
Accuracy:  0.6890459363957597

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0062.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4151658905403955
AUROC: 0.697541504768633
AUPRC: 0.3322600885019806
Sensitivity: 0.6526315789473685
Specificity: 0.6469798657718121
Threshold: 0.21
Accuracy:  0.647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.4045459900051355
AUROC: 0.737488319203792
AUPRC: 0.36277927856611114
Sensitivity: 0.6810551558752997
Specificity: 0.6624413145539906
Threshold: 0.21
Accuracy:  0.6654888103651354

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0063.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.42401014268398285
AUROC: 0.6985517484987638
AUPRC: 0.3356514631440185
Sensitivity: 0.6385964912280702
Specificity: 0.6550335570469799
Threshold: 0.1
Accuracy:  0.652394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.42481888420879843
AUROC: 0.7344228842278291
AUPRC: 0.3597094447149668
Sensitivity: 0.684652278177458
Specificity: 0.6645539906103286
Threshold: 0.1
Accuracy:  0.6678445229681979

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0064.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
Loss: 0.42431130579539705
AUROC: 0.6981278700105971
AUPRC: 0.3247341942890681
Sensitivity: 0.6701754385964912
Specificity: 0.6087248322147651
Threshold: 0.1
Accuracy:  0.6185915492957746

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.02it/s]
Loss: 0.4251794371753931
AUROC: 0.7349216401526666
AUPRC: 0.354836899163932
Sensitivity: 0.63189448441247
Specificity: 0.7105633802816902
Threshold: 0.11
Accuracy:  0.6976835492736553

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0065.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.40669349900313784
AUROC: 0.6992228894383611
AUPRC: 0.3350470608317308
Sensitivity: 0.6350877192982456
Specificity: 0.6624161073825503
Threshold: 0.13
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.08it/s]
Loss: 0.40170738026499747
AUROC: 0.7376398880895283
AUPRC: 0.36397759960906256
Sensitivity: 0.6654676258992805
Specificity: 0.676056338028169
Threshold: 0.13
Accuracy:  0.6743227326266196

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0066.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.4095217159816197
AUROC: 0.6986953962086424
AUPRC: 0.3262329965823388
Sensitivity: 0.6491228070175439
Specificity: 0.6503355704697986
Threshold: 0.18
Accuracy:  0.6501408450704226

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.03it/s]
Loss: 0.4048482421785593
AUROC: 0.7368614967181185
AUPRC: 0.3595550000520566
Sensitivity: 0.6738609112709832
Specificity: 0.6669014084507042
Threshold: 0.18
Accuracy:  0.6680408323517865

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0067.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.40724456097398487
AUROC: 0.6986129753914989
AUPRC: 0.33654773795165227
Sensitivity: 0.6456140350877193
Specificity: 0.6442953020134228
Threshold: 0.13
Accuracy:  0.6445070422535212

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.11it/s]
Loss: 0.40498713701963424
AUROC: 0.7367829679918037
AUPRC: 0.3647783356718854
Sensitivity: 0.6882494004796164
Specificity: 0.6596244131455399
Threshold: 0.13
Accuracy:  0.6643109540636042

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0068.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.07it/s]
Loss: 0.41211461808000294
AUROC: 0.6995007653361591
AUPRC: 0.3328067589721786
Sensitivity: 0.6526315789473685
Specificity: 0.6536912751677852
Threshold: 0.2
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.10it/s]
Loss: 0.40234430097043516
AUROC: 0.7376677531214465
AUPRC: 0.3643696932713662
Sensitivity: 0.6750599520383693
Specificity: 0.6711267605633803
Threshold: 0.2
Accuracy:  0.6717707106399686

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0069.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.4276946208306721
AUROC: 0.6968715412692805
AUPRC: 0.3275584377537508
Sensitivity: 0.624561403508772
Specificity: 0.6724832214765101
Threshold: 0.11
Accuracy:  0.6647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4279987119138241
AUROC: 0.7309493250470047
AUPRC: 0.35137631589657514
Sensitivity: 0.6534772182254197
Specificity: 0.6943661971830986
Threshold: 0.11
Accuracy:  0.68767177071064

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0070.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.41040220643792835
AUROC: 0.697948899093371
AUPRC: 0.3319333612247987
Sensitivity: 0.6491228070175439
Specificity: 0.6496644295302013
Threshold: 0.19
Accuracy:  0.6495774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4044895201921463
AUROC: 0.7371101710181152
AUPRC: 0.36227559436213247
Sensitivity: 0.6762589928057554
Specificity: 0.6664319248826291
Threshold: 0.19
Accuracy:  0.6680408323517865

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0071.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.40641736132758005
AUROC: 0.698255033557047
AUPRC: 0.32979287041092514
Sensitivity: 0.6385964912280702
Specificity: 0.6590604026845638
Threshold: 0.17
Accuracy:  0.655774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.3993505034595728
AUROC: 0.7374152790443701
AUPRC: 0.3630298831691191
Sensitivity: 0.6642685851318945
Specificity: 0.6788732394366197
Threshold: 0.17
Accuracy:  0.6764821358460934

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0072.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4114976205996105
AUROC: 0.6982644530790062
AUPRC: 0.3295781124986956
Sensitivity: 0.6701754385964912
Specificity: 0.6422818791946309
Threshold: 0.19
Accuracy:  0.6467605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.40739274993538854
AUROC: 0.7382702288873126
AUPRC: 0.36332531579650507
Sensitivity: 0.684652278177458
Specificity: 0.6593896713615024
Threshold: 0.19
Accuracy:  0.6635257165292501

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0073.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4216961009161813
AUROC: 0.6979983515836571
AUPRC: 0.3429967300640473
Sensitivity: 0.6631578947368421
Specificity: 0.6281879194630873
Threshold: 0.11
Accuracy:  0.6338028169014085

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4220617298036814
AUROC: 0.7322890982988257
AUPRC: 0.3570052788918978
Sensitivity: 0.697841726618705
Specificity: 0.6434272300469484
Threshold: 0.11
Accuracy:  0.6523360816647036

Intermediate Model:
  ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0074.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.4118195665734155
AUROC: 0.6978052513834923
AUPRC: 0.3252326327643474
Sensitivity: 0.6666666666666666
Specificity: 0.6422818791946309
Threshold: 0.19
Accuracy:  0.6461971830985915

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.4047918446362019
AUROC: 0.7376653606692112
AUPRC: 0.36105149894700694
Sensitivity: 0.6834532374100719
Specificity: 0.6586854460093897
Threshold: 0.19
Accuracy:  0.662740478994896


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      54, 0.4031
  Epoch with best model Test AUROC:     72, 0.7383
  Epoch with best model Test Accuracy:  34, 0.7059

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   54, 0.4031
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0054.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.39954023621976376
AUROC: 0.7364418324495333
AUPRC: 0.36268438091256794
Sensitivity: 0.6678657074340527
Specificity: 0.6732394366197183
Threshold: 0.15
Accuracy:  0.6723596387907342
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.7364418324495333
best_model_val_test_auprc: 0.36268438091256794

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  72, 0.7383
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/ABP_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_ad0d8b9b_0072.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.40739274993538854
AUROC: 0.7382702288873126
AUPRC: 0.36332531579650507
Sensitivity: 0.684652278177458
Specificity: 0.6593896713615024
Threshold: 0.19
Accuracy:  0.6635257165292501
best_model_auroc_test_auroc: 0.7382702288873126
best_model_auroc_test_auprc: 0.36332531579650507

Total Processing Time: 6425.5290 sec
In [104]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=True, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           True
  use_eeg:           True
  use_ecg:           False
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (abpResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (abpFc): Linear(in_features=2814, out_features=32, bias=True)
  (eegResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
  )
  (eegFc): Linear(in_features=720, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=64, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.81it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 14:19:16.484150] Completed epoch 0 with training loss 0.43299252, validation loss 0.42436972
Validation loss improved to 0.42436972. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.81it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 14:20:06.757677] Completed epoch 1 with training loss 0.40656328, validation loss 0.41991648
Validation loss improved to 0.41991648. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 14:20:57.002024] Completed epoch 2 with training loss 0.39961162, validation loss 0.42685542
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 14:21:47.171678] Completed epoch 3 with training loss 0.39657268, validation loss 0.42491174
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 14:22:37.251969] Completed epoch 4 with training loss 0.39609534, validation loss 0.43260995
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.83it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
[2024-05-04 14:23:27.040853] Completed epoch 5 with training loss 0.39693204, validation loss 0.42953798
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 14:24:17.016667] Completed epoch 6 with training loss 0.39632326, validation loss 0.42082444
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.83it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 14:25:06.800295] Completed epoch 7 with training loss 0.39612883, validation loss 0.43149933
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.81it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 14:25:57.037944] Completed epoch 8 with training loss 0.39552733, validation loss 0.41584259
Validation loss improved to 0.41584259. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.80it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 14:26:47.557442] Completed epoch 9 with training loss 0.39368799, validation loss 0.42469853
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:45<00:00,  1.77it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 14:27:39.026271] Completed epoch 10 with training loss 0.39696151, validation loss 0.42758888
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:28:28.781307] Completed epoch 11 with training loss 0.39607811, validation loss 0.42492199
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:29:16.772282] Completed epoch 12 with training loss 0.39598331, validation loss 0.41934061
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:30:04.796377] Completed epoch 13 with training loss 0.39501119, validation loss 0.42271385
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:30:52.771750] Completed epoch 14 with training loss 0.39501089, validation loss 0.42494670
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
[2024-05-04 14:31:41.095386] Completed epoch 15 with training loss 0.39569598, validation loss 0.44269198
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:32:29.111899] Completed epoch 16 with training loss 0.39525142, validation loss 0.42399654
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:33:16.913665] Completed epoch 17 with training loss 0.39349350, validation loss 0.42028704
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:34:04.979858] Completed epoch 18 with training loss 0.39498296, validation loss 0.42418358
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:34:52.757370] Completed epoch 19 with training loss 0.39513761, validation loss 0.41829768
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 14:35:40.963363] Completed epoch 20 with training loss 0.39481172, validation loss 0.40860328
Validation loss improved to 0.40860328. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:36:29.031207] Completed epoch 21 with training loss 0.39596313, validation loss 0.41530627
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 14:37:16.877768] Completed epoch 22 with training loss 0.39428645, validation loss 0.42590958
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.86it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:38:05.685303] Completed epoch 23 with training loss 0.39414319, validation loss 0.42523557
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:38:53.569260] Completed epoch 24 with training loss 0.39444375, validation loss 0.41657004
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 14:39:41.845243] Completed epoch 25 with training loss 0.39486647, validation loss 0.41937563
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
[2024-05-04 14:40:29.887034] Completed epoch 26 with training loss 0.39541346, validation loss 0.41139880
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:41:17.660611] Completed epoch 27 with training loss 0.39459968, validation loss 0.40730506
Validation loss improved to 0.40730506. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 14:42:05.963941] Completed epoch 28 with training loss 0.39512378, validation loss 0.41373488
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.88it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
[2024-05-04 14:42:54.345447] Completed epoch 29 with training loss 0.39484271, validation loss 0.41507521
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
[2024-05-04 14:43:42.283376] Completed epoch 30 with training loss 0.39296928, validation loss 0.41263357
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 14:44:30.080582] Completed epoch 31 with training loss 0.39370519, validation loss 0.42609367
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 14:45:18.015436] Completed epoch 32 with training loss 0.39508826, validation loss 0.41890869
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.88it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
[2024-05-04 14:46:06.319503] Completed epoch 33 with training loss 0.39346227, validation loss 0.41989753
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:46:54.290894] Completed epoch 34 with training loss 0.39409399, validation loss 0.40983006
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:47:42.207694] Completed epoch 35 with training loss 0.39454064, validation loss 0.42097417
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:48:30.062511] Completed epoch 36 with training loss 0.39375293, validation loss 0.41255936
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:41<00:00,  1.91it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
[2024-05-04 14:49:17.697475] Completed epoch 37 with training loss 0.39418942, validation loss 0.40410632
Validation loss improved to 0.40410632. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
[2024-05-04 14:50:05.763779] Completed epoch 38 with training loss 0.39413151, validation loss 0.40720725
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 14:50:53.786745] Completed epoch 39 with training loss 0.39361471, validation loss 0.40780884
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
[2024-05-04 14:51:41.893170] Completed epoch 40 with training loss 0.39392638, validation loss 0.40560105
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:52:29.726748] Completed epoch 41 with training loss 0.39386719, validation loss 0.40491083
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 14:53:17.693959] Completed epoch 42 with training loss 0.39423186, validation loss 0.41225594
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 14:54:05.917995] Completed epoch 43 with training loss 0.39454716, validation loss 0.40586036
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
[2024-05-04 14:54:53.935771] Completed epoch 44 with training loss 0.39310926, validation loss 0.42581749
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.88it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 14:55:42.252804] Completed epoch 45 with training loss 0.39458129, validation loss 0.40404221
Validation loss improved to 0.40404221. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
[2024-05-04 14:56:30.308308] Completed epoch 46 with training loss 0.39399758, validation loss 0.40937296
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 14:57:18.337912] Completed epoch 47 with training loss 0.39311308, validation loss 0.40939385
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.87it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 14:58:06.971348] Completed epoch 48 with training loss 0.39469045, validation loss 0.40505454
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.84it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
[2024-05-04 14:58:56.470630] Completed epoch 49 with training loss 0.39510280, validation loss 0.40949222
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.84it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
[2024-05-04 14:59:45.897527] Completed epoch 50 with training loss 0.39367929, validation loss 0.40982747
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.85it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
[2024-05-04 15:00:35.071286] Completed epoch 51 with training loss 0.39319104, validation loss 0.41579238
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
[2024-05-04 15:01:25.112142] Completed epoch 52 with training loss 0.39421201, validation loss 0.40424067
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.84it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 15:02:14.445152] Completed epoch 53 with training loss 0.39399761, validation loss 0.42479390
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.85it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
[2024-05-04 15:03:03.611036] Completed epoch 54 with training loss 0.39274964, validation loss 0.43293145
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.85it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
[2024-05-04 15:03:52.987156] Completed epoch 55 with training loss 0.39404041, validation loss 0.41689798
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.86it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 15:04:42.065508] Completed epoch 56 with training loss 0.39332366, validation loss 0.42345873
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.82it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
[2024-05-04 15:05:32.001171] Completed epoch 57 with training loss 0.39482164, validation loss 0.41802689
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.83it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
[2024-05-04 15:06:21.610610] Completed epoch 58 with training loss 0.39458838, validation loss 0.41486332
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.79it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 15:07:12.324605] Completed epoch 59 with training loss 0.39399642, validation loss 0.40901858
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.81it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 15:08:02.852042] Completed epoch 60 with training loss 0.39500070, validation loss 0.45898440
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.80it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 15:08:53.493481] Completed epoch 61 with training loss 0.39338532, validation loss 0.41147327
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.80it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 15:09:44.259707] Completed epoch 62 with training loss 0.39434654, validation loss 0.40442792
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:44<00:00,  1.81it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 15:10:34.483795] Completed epoch 63 with training loss 0.39289430, validation loss 0.40726772
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.84it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
[2024-05-04 15:11:24.042024] Completed epoch 64 with training loss 0.39356971, validation loss 0.42115632
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:43<00:00,  1.83it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
[2024-05-04 15:12:13.867464] Completed epoch 65 with training loss 0.39461100, validation loss 0.41163680
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   45, 0.404
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.64it/s]
Loss: 0.4245825154440744
AUROC: 0.6871329330036501
AUPRC: 0.3158412573389842
Sensitivity: 0.6982456140350877
Specificity: 0.5892617449664429
Threshold: 0.13
Accuracy:  0.6067605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.424983149766922
AUROC: 0.7241798110807129
AUPRC: 0.34692229453436063
Sensitivity: 0.6223021582733813
Specificity: 0.7129107981220657
Threshold: 0.14
Accuracy:  0.6980761680408324

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.42076922953128815
AUROC: 0.6973342752855293
AUPRC: 0.3341250668294243
Sensitivity: 0.6631578947368421
Specificity: 0.6456375838926175
Threshold: 0.13
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.42015210203826425
AUROC: 0.7308643226264059
AUPRC: 0.35536236006661515
Sensitivity: 0.6882494004796164
Specificity: 0.6516431924882629
Threshold: 0.13
Accuracy:  0.6576364350215941

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4261827660458429
AUROC: 0.6981255151301071
AUPRC: 0.33987571046588166
Sensitivity: 0.6771929824561403
Specificity: 0.6261744966442953
Threshold: 0.11
Accuracy:  0.6343661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4264295767992735
AUROC: 0.7324199795093502
AUPRC: 0.359395682639761
Sensitivity: 0.7050359712230215
Specificity: 0.6356807511737089
Threshold: 0.11
Accuracy:  0.6470357283078131

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.4245948557342802
AUROC: 0.6988366890380313
AUPRC: 0.34108588677857443
Sensitivity: 0.6175438596491228
Specificity: 0.6785234899328859
Threshold: 0.12
Accuracy:  0.6687323943661971

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.42466086223721505
AUROC: 0.7336892457864694
AUPRC: 0.3613050083058403
Sensitivity: 0.6522781774580336
Specificity: 0.6962441314553991
Threshold: 0.12
Accuracy:  0.6890459363957597

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.4314325622149876
AUROC: 0.69783350994937
AUPRC: 0.340725246274632
Sensitivity: 0.6701754385964912
Specificity: 0.6322147651006711
Threshold: 0.1
Accuracy:  0.6383098591549295

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.43231446817517283
AUROC: 0.7330102115490706
AUPRC: 0.36128684504729924
Sensitivity: 0.7038369304556354
Specificity: 0.637793427230047
Threshold: 0.1
Accuracy:  0.6486062033765214

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4285196214914322
AUROC: 0.6977487342517368
AUPRC: 0.3392330556635423
Sensitivity: 0.6175438596491228
Specificity: 0.6798657718120805
Threshold: 0.11
Accuracy:  0.6698591549295775

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4299471080303192
AUROC: 0.7332300356897581
AUPRC: 0.36102016741866383
Sensitivity: 0.6486810551558753
Specificity: 0.6988262910798122
Threshold: 0.11
Accuracy:  0.690616411464468

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.420857093163899
AUROC: 0.6977510891322266
AUPRC: 0.33745527644755
Sensitivity: 0.6280701754385964
Specificity: 0.6664429530201342
Threshold: 0.13
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.41947851702570915
AUROC: 0.7336018509136353
AUPRC: 0.3603665602236543
Sensitivity: 0.670263788968825
Specificity: 0.6812206572769953
Threshold: 0.13
Accuracy:  0.6794267765999215

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
Loss: 0.42985270491668154
AUROC: 0.697082303073119
AUPRC: 0.338022145830514
Sensitivity: 0.6035087719298246
Specificity: 0.687248322147651
Threshold: 0.11
Accuracy:  0.6738028169014084

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4307585958391428
AUROC: 0.7326689352743158
AUPRC: 0.360757034485548
Sensitivity: 0.6390887290167866
Specificity: 0.710093896713615
Threshold: 0.11
Accuracy:  0.6984687868080094

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.41578709866319385
AUROC: 0.6971929824561404
AUPRC: 0.33678921148008795
Sensitivity: 0.6385964912280702
Specificity: 0.6624161073825503
Threshold: 0.15
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.41544696502387524
AUROC: 0.7329985307528626
AUPRC: 0.36016425012529907
Sensitivity: 0.6774580335731415
Specificity: 0.6746478873239437
Threshold: 0.15
Accuracy:  0.6751079701609737

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.42456284165382385
AUROC: 0.6966654892264218
AUPRC: 0.3412478875387347
Sensitivity: 0.624561403508772
Specificity: 0.6684563758389261
Threshold: 0.12
Accuracy:  0.6614084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.4253922667354345
AUROC: 0.7322712252733026
AUPRC: 0.360035735726881
Sensitivity: 0.6606714628297362
Specificity: 0.6936619718309859
Threshold: 0.12
Accuracy:  0.6882606988614056

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
Loss: 0.42713548243045807
AUROC: 0.6963134345931945
AUPRC: 0.3407606319672188
Sensitivity: 0.6631578947368421
Specificity: 0.6322147651006711
Threshold: 0.11
Accuracy:  0.6371830985915493

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.4289887323975563
AUROC: 0.7314145866405467
AUPRC: 0.35860149731470303
Sensitivity: 0.6990407673860911
Specificity: 0.6474178403755868
Threshold: 0.11
Accuracy:  0.6558696505692972

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.32it/s]
Loss: 0.4232297773872103
AUROC: 0.6965124219945837
AUPRC: 0.3426889244100334
Sensitivity: 0.6701754385964912
Specificity: 0.6288590604026846
Threshold: 0.12
Accuracy:  0.6354929577464788

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.42507121339440346
AUROC: 0.7315885319913084
AUPRC: 0.35858270681569177
Sensitivity: 0.7026378896882494
Specificity: 0.6417840375586854
Threshold: 0.12
Accuracy:  0.651747153513938

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.42161584964820314
AUROC: 0.6967855881314025
AUPRC: 0.3404852941383125
Sensitivity: 0.624561403508772
Specificity: 0.6657718120805369
Threshold: 0.13
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4209995470941067
AUROC: 0.7320211436484615
AUPRC: 0.35858420301846733
Sensitivity: 0.6654676258992805
Specificity: 0.6833333333333333
Threshold: 0.13
Accuracy:  0.6804083235178642

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4214271626302174
AUROC: 0.6966961026727895
AUPRC: 0.3408817563670314
Sensitivity: 0.6666666666666666
Specificity: 0.6261744966442953
Threshold: 0.12
Accuracy:  0.6326760563380281

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.42225329875946044
AUROC: 0.7317396786795916
AUPRC: 0.35871405690323377
Sensitivity: 0.7050359712230215
Specificity: 0.6415492957746479
Threshold: 0.12
Accuracy:  0.6519434628975265

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4253803938627243
AUROC: 0.6966019074531968
AUPRC: 0.34322074186535045
Sensitivity: 0.6140350877192983
Specificity: 0.6791946308724832
Threshold: 0.12
Accuracy:  0.6687323943661971

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.4256772555410862
AUROC: 0.7312329010031411
AUPRC: 0.357993790658383
Sensitivity: 0.6378896882494005
Specificity: 0.7023474178403756
Threshold: 0.12
Accuracy:  0.6917942677659992

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.32it/s]
Loss: 0.4445871114730835
AUROC: 0.6960414458966208
AUPRC: 0.3433081654468243
Sensitivity: 0.6035087719298246
Specificity: 0.6791946308724832
Threshold: 0.09
Accuracy:  0.6670422535211268

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.446126201748848
AUROC: 0.7304190450456536
AUPRC: 0.357383547530849
Sensitivity: 0.6378896882494005
Specificity: 0.7023474178403756
Threshold: 0.09
Accuracy:  0.6917942677659992

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4242941864899227
AUROC: 0.6965147768750737
AUPRC: 0.3377615868019736
Sensitivity: 0.6736842105263158
Specificity: 0.6187919463087248
Threshold: 0.11
Accuracy:  0.6276056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.42515424974262717
AUROC: 0.7309867598878643
AUPRC: 0.35735060258597146
Sensitivity: 0.7122302158273381
Specificity: 0.636150234741784
Threshold: 0.11
Accuracy:  0.6486062033765214

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4202090586934771
AUROC: 0.6967738137289532
AUPRC: 0.33799857542083417
Sensitivity: 0.6456140350877193
Specificity: 0.6630872483221476
Threshold: 0.12
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4208466548472643
AUROC: 0.7311075083595097
AUPRC: 0.3580475525366427
Sensitivity: 0.6666666666666666
Specificity: 0.6762910798122066
Threshold: 0.12
Accuracy:  0.6747153513937966

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.4240147279841559
AUROC: 0.6964535499823383
AUPRC: 0.33773741798294
Sensitivity: 0.6666666666666666
Specificity: 0.6335570469798658
Threshold: 0.11
Accuracy:  0.6388732394366197

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.4259326111525297
AUROC: 0.7303793584850429
AUPRC: 0.3559262246895499
Sensitivity: 0.6918465227817746
Specificity: 0.6511737089201878
Threshold: 0.11
Accuracy:  0.6578327444051826

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4179492635386331
AUROC: 0.6973083716001414
AUPRC: 0.33929294636762564
Sensitivity: 0.656140350877193
Specificity: 0.6563758389261745
Threshold: 0.12
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.41784732416272163
AUROC: 0.731209539410725
AUPRC: 0.35787009004451564
Sensitivity: 0.6738609112709832
Specificity: 0.6706572769953052
Threshold: 0.12
Accuracy:  0.671181782489203

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4075357956545694
AUROC: 0.6980242552690451
AUPRC: 0.3400699261490726
Sensitivity: 0.6666666666666666
Specificity: 0.6308724832214765
Threshold: 0.14
Accuracy:  0.6366197183098592

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4072968803346157
AUROC: 0.7323020456873939
AUPRC: 0.35989279385360795
Sensitivity: 0.6438848920863309
Specificity: 0.7046948356807512
Threshold: 0.15
Accuracy:  0.6947389085198272

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.41519085850034443
AUROC: 0.6969739785705875
AUPRC: 0.33607647465430485
Sensitivity: 0.6736842105263158
Specificity: 0.6120805369127517
Threshold: 0.14
Accuracy:  0.6219718309859155

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.4152336049824953
AUROC: 0.7307520181038268
AUPRC: 0.3570375419493672
Sensitivity: 0.7146282973621103
Specificity: 0.6347417840375587
Threshold: 0.14
Accuracy:  0.6478209658421673

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.42624883353710175
AUROC: 0.6965642293653597
AUPRC: 0.33750105038978917
Sensitivity: 0.5964912280701754
Specificity: 0.6859060402684564
Threshold: 0.11
Accuracy:  0.6715492957746478

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.42786691822111605
AUROC: 0.7301546087074002
AUPRC: 0.356181879403699
Sensitivity: 0.6282973621103117
Specificity: 0.7131455399061033
Threshold: 0.11
Accuracy:  0.6992540243423636

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4252057096787861
AUROC: 0.6955634051571883
AUPRC: 0.33051599698876505
Sensitivity: 0.6912280701754386
Specificity: 0.5946308724832214
Threshold: 0.11
Accuracy:  0.6101408450704225

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.4264670357108116
AUROC: 0.729551429279112
AUPRC: 0.3541726794707162
Sensitivity: 0.7266187050359713
Specificity: 0.6206572769953052
Threshold: 0.11
Accuracy:  0.6380054966627405

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4178503709180014
AUROC: 0.6970563993877311
AUPRC: 0.3353048858336619
Sensitivity: 0.6771929824561403
Specificity: 0.6087248322147651
Threshold: 0.12
Accuracy:  0.6197183098591549

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.41833796389400957
AUROC: 0.7307083910336519
AUPRC: 0.3567250957818727
Sensitivity: 0.7146282973621103
Specificity: 0.631924882629108
Threshold: 0.12
Accuracy:  0.6454652532391049

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.41828104640756336
AUROC: 0.69732485576357
AUPRC: 0.33488479581847264
Sensitivity: 0.6350877192982456
Specificity: 0.6630872483221476
Threshold: 0.11
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.41877940073609354
AUROC: 0.7311046937098209
AUPRC: 0.3577670803509322
Sensitivity: 0.6606714628297362
Specificity: 0.6795774647887324
Threshold: 0.11
Accuracy:  0.6764821358460934

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.4120425986392157
AUROC: 0.6970658189096903
AUPRC: 0.3370460172281301
Sensitivity: 0.6140350877192983
Specificity: 0.6778523489932886
Threshold: 0.14
Accuracy:  0.6676056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.41143285147845743
AUROC: 0.7309774715438917
AUPRC: 0.35789904616414325
Sensitivity: 0.6426858513189448
Specificity: 0.7002347417840376
Threshold: 0.14
Accuracy:  0.6908127208480566

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.40785418663706097
AUROC: 0.6992064052749323
AUPRC: 0.3370559160087892
Sensitivity: 0.656140350877193
Specificity: 0.6510067114093959
Threshold: 0.14
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.40540231168270113
AUROC: 0.7339643777935397
AUPRC: 0.3612055907806974
Sensitivity: 0.6882494004796164
Specificity: 0.6607981220657277
Threshold: 0.14
Accuracy:  0.6652925009815469

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.41391395032405853
AUROC: 0.6990792417284822
AUPRC: 0.33467779066563674
Sensitivity: 0.6666666666666666
Specificity: 0.636241610738255
Threshold: 0.13
Accuracy:  0.6411267605633802

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.412836330384016
AUROC: 0.7328582204658808
AUPRC: 0.3588052296611114
Sensitivity: 0.6918465227817746
Specificity: 0.6485915492957747
Threshold: 0.13
Accuracy:  0.6556733411857086

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.41368335272584644
AUROC: 0.698179677381373
AUPRC: 0.335066359532073
Sensitivity: 0.6666666666666666
Specificity: 0.6382550335570469
Threshold: 0.12
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.41362915001809597
AUROC: 0.7315837470868376
AUPRC: 0.3568748311598734
Sensitivity: 0.6834532374100719
Specificity: 0.6530516431924883
Threshold: 0.12
Accuracy:  0.6580290537887711

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
Loss: 0.41307283299309866
AUROC: 0.6979135758860238
AUPRC: 0.3350908813138368
Sensitivity: 0.6736842105263158
Specificity: 0.625503355704698
Threshold: 0.13
Accuracy:  0.6332394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.41248998381197455
AUROC: 0.731208272818365
AUPRC: 0.3571479435793826
Sensitivity: 0.7014388489208633
Specificity: 0.639906103286385
Threshold: 0.13
Accuracy:  0.6499803690616411

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.42494217519249233
AUROC: 0.7002896503002473
AUPRC: 0.3399416733492331
Sensitivity: 0.6280701754385964
Specificity: 0.661744966442953
Threshold: 0.1
Accuracy:  0.6563380281690141

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.45it/s]
Loss: 0.42534564174711703
AUROC: 0.7339901318381914
AUPRC: 0.3605466319747809
Sensitivity: 0.6690647482014388
Specificity: 0.681924882629108
Threshold: 0.1
Accuracy:  0.6798193953670986

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.4178836303097861
AUROC: 0.6964017426115624
AUPRC: 0.33076977231996973
Sensitivity: 0.631578947368421
Specificity: 0.661744966442953
Threshold: 0.13
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.43it/s]
Loss: 0.41727231033146384
AUROC: 0.7294882403936006
AUPRC: 0.352878459437689
Sensitivity: 0.6510791366906474
Specificity: 0.6807511737089202
Threshold: 0.13
Accuracy:  0.6758932076953278

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
Loss: 0.41929677980286734
AUROC: 0.6965689391263393
AUPRC: 0.340690515723878
Sensitivity: 0.6526315789473685
Specificity: 0.6503355704697986
Threshold: 0.11
Accuracy:  0.6507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.41784888654947283
AUROC: 0.7305509113835692
AUPRC: 0.3563213973787574
Sensitivity: 0.6738609112709832
Specificity: 0.6647887323943662
Threshold: 0.11
Accuracy:  0.6662740478994896

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.49it/s]
Loss: 0.41013174397604807
AUROC: 0.698203226186271
AUPRC: 0.33849179780232586
Sensitivity: 0.6736842105263158
Specificity: 0.6308724832214765
Threshold: 0.14
Accuracy:  0.6377464788732394

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:15<00:00,  2.51it/s]
Loss: 0.40721556134521963
AUROC: 0.7321524470564393
AUPRC: 0.3598192266037933
Sensitivity: 0.6954436450839329
Specificity: 0.6448356807511737
Threshold: 0.14
Accuracy:  0.6531213191990577

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
Loss: 0.41958213065351757
AUROC: 0.6959425409160485
AUPRC: 0.34236321241096657
Sensitivity: 0.6771929824561403
Specificity: 0.6201342281879194
Threshold: 0.1
Accuracy:  0.6292957746478873

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.41861975751817226
AUROC: 0.7304863151732136
AUPRC: 0.3566219780028161
Sensitivity: 0.7062350119904077
Specificity: 0.6392018779342723
Threshold: 0.1
Accuracy:  0.6501766784452296

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4121375190360205
AUROC: 0.6994159896385259
AUPRC: 0.3392864861925136
Sensitivity: 0.6350877192982456
Specificity: 0.6624161073825503
Threshold: 0.2
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.4044652730226517
AUROC: 0.7370267166548452
AUPRC: 0.365180268329175
Sensitivity: 0.6714628297362111
Specificity: 0.6774647887323944
Threshold: 0.2
Accuracy:  0.6764821358460934

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.404655750308718
AUROC: 0.6998068997998351
AUPRC: 0.34264122476177644
Sensitivity: 0.624561403508772
Specificity: 0.6731543624161074
Threshold: 0.15
Accuracy:  0.6653521126760563

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4010766014456749
AUROC: 0.7350195899618333
AUPRC: 0.3629984338963738
Sensitivity: 0.657074340527578
Specificity: 0.6929577464788732
Threshold: 0.15
Accuracy:  0.6870828425598744

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4071846753358841
AUROC: 0.6982715177204757
AUPRC: 0.3349328239982149
Sensitivity: 0.656140350877193
Specificity: 0.6395973154362417
Threshold: 0.15
Accuracy:  0.6422535211267606

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.4068899303674698
AUROC: 0.7338443329843168
AUPRC: 0.36038679566107007
Sensitivity: 0.6918465227817746
Specificity: 0.6539906103286385
Threshold: 0.15
Accuracy:  0.660188457008245

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4071096990789686
AUROC: 0.6985941363475805
AUPRC: 0.3420664691288544
Sensitivity: 0.6421052631578947
Specificity: 0.6570469798657718
Threshold: 0.18
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.40107125863432885
AUROC: 0.735520316141453
AUPRC: 0.3639807064234287
Sensitivity: 0.6822541966426858
Specificity: 0.673943661971831
Threshold: 0.18
Accuracy:  0.6753042795445622

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
Loss: 0.4058120378426143
AUROC: 0.6995219592605675
AUPRC: 0.3358100708427076
Sensitivity: 0.6666666666666666
Specificity: 0.6295302013422819
Threshold: 0.17
Accuracy:  0.6354929577464788

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.3993694569915533
AUROC: 0.7376256741086005
AUPRC: 0.364241545966003
Sensitivity: 0.6474820143884892
Specificity: 0.6976525821596244
Threshold: 0.18
Accuracy:  0.6894385551629368

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4061742637838636
AUROC: 0.6986459437183563
AUPRC: 0.34102261981032417
Sensitivity: 0.6807017543859649
Specificity: 0.6167785234899329
Threshold: 0.16
Accuracy:  0.6270422535211267

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4020279377698898
AUROC: 0.7333029351166953
AUPRC: 0.36178480515177686
Sensitivity: 0.6426858513189448
Specificity: 0.7028169014084507
Threshold: 0.17
Accuracy:  0.6929721240675304

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4124713348490851
AUROC: 0.6998186742022843
AUPRC: 0.34327567885290966
Sensitivity: 0.6596491228070176
Specificity: 0.6463087248322148
Threshold: 0.11
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4103280879557133
AUROC: 0.7339460825705632
AUPRC: 0.36126226185010707
Sensitivity: 0.6858513189448441
Specificity: 0.6591549295774648
Threshold: 0.11
Accuracy:  0.6635257165292501

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4061164068324225
AUROC: 0.6999411279877545
AUPRC: 0.345348043456383
Sensitivity: 0.6526315789473685
Specificity: 0.6429530201342282
Threshold: 0.13
Accuracy:  0.6445070422535212

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.37it/s]
Loss: 0.4031822498887777
AUROC: 0.7341529593226828
AUPRC: 0.36224468045256725
Sensitivity: 0.6966426858513189
Specificity: 0.6497652582159624
Threshold: 0.13
Accuracy:  0.6574401256380055

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.42653248991285053
AUROC: 0.6997291887436712
AUPRC: 0.33333868598684485
Sensitivity: 0.6456140350877193
Specificity: 0.6550335570469799
Threshold: 0.09
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4273447509855032
AUROC: 0.7339213136533027
AUPRC: 0.35905619428067126
Sensitivity: 0.6714628297362111
Specificity: 0.677699530516432
Threshold: 0.09
Accuracy:  0.676678445229682

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0045.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.40378875604697634
AUROC: 0.6984893441657836
AUPRC: 0.335484106543246
Sensitivity: 0.6350877192982456
Specificity: 0.6590604026845638
Threshold: 0.15
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.3969287659972906
AUROC: 0.737732630796771
AUPRC: 0.3649217752953224
Sensitivity: 0.6642685851318945
Specificity: 0.6786384976525821
Threshold: 0.15
Accuracy:  0.6762858264625049

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0046.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
Loss: 0.40799921112401144
AUROC: 0.6981184504886377
AUPRC: 0.3343959082411299
Sensitivity: 0.6807017543859649
Specificity: 0.6114093959731544
Threshold: 0.13
Accuracy:  0.6225352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4094430111348629
AUROC: 0.7337566566465138
AUPRC: 0.3613256992470484
Sensitivity: 0.7170263788968825
Specificity: 0.6223004694835681
Threshold: 0.13
Accuracy:  0.6378091872791519

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0047.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.40785992571285795
AUROC: 0.6985281996938656
AUPRC: 0.3350120772689553
Sensitivity: 0.6631578947368421
Specificity: 0.6248322147651006
Threshold: 0.13
Accuracy:  0.6309859154929578

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.40305305942893027
AUROC: 0.7384779500343387
AUPRC: 0.36396038324674473
Sensitivity: 0.7134292565947242
Specificity: 0.6326291079812206
Threshold: 0.13
Accuracy:  0.6458578720062819

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0048.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
Loss: 0.40554586904389517
AUROC: 0.6980901919227599
AUPRC: 0.34089828840783865
Sensitivity: 0.6456140350877193
Specificity: 0.6597315436241611
Threshold: 0.17
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.3973755333572626
AUROC: 0.7382764211166277
AUPRC: 0.365180613920951
Sensitivity: 0.6822541966426858
Specificity: 0.6727699530516432
Threshold: 0.17
Accuracy:  0.6743227326266196

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0049.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.4101185330322811
AUROC: 0.6977204756858589
AUPRC: 0.3279465349929623
Sensitivity: 0.656140350877193
Specificity: 0.6369127516778523
Threshold: 0.17
Accuracy:  0.64

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.44it/s]
Loss: 0.40584607012569907
AUROC: 0.7362729534682113
AUPRC: 0.36258113989881235
Sensitivity: 0.6906474820143885
Specificity: 0.652112676056338
Threshold: 0.17
Accuracy:  0.6584216725559482

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0050.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.41031243332794737
AUROC: 0.6984599081596609
AUPRC: 0.33053647018103083
Sensitivity: 0.6456140350877193
Specificity: 0.6523489932885906
Threshold: 0.13
Accuracy:  0.6512676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.41002492532134055
AUROC: 0.7340271444815979
AUPRC: 0.3615885127718425
Sensitivity: 0.6798561151079137
Specificity: 0.6643192488262911
Threshold: 0.13
Accuracy:  0.6668629760502552

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0051.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4169694312981197
AUROC: 0.6984057459083951
AUPRC: 0.3375204682793085
Sensitivity: 0.6280701754385964
Specificity: 0.6651006711409396
Threshold: 0.11
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.48it/s]
Loss: 0.41641843020915986
AUROC: 0.732535098681618
AUPRC: 0.35878570938202337
Sensitivity: 0.657074340527578
Specificity: 0.6884976525821597
Threshold: 0.11
Accuracy:  0.6833529642716922

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0052.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4044227578810283
AUROC: 0.6979771576592487
AUPRC: 0.34036330050070107
Sensitivity: 0.6526315789473685
Specificity: 0.6476510067114094
Threshold: 0.14
Accuracy:  0.6484507042253521

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.4000741306692362
AUROC: 0.7356763884666915
AUPRC: 0.36488277906809563
Sensitivity: 0.6930455635491607
Specificity: 0.6572769953051644
Threshold: 0.14
Accuracy:  0.6631330977620731

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0053.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.4250538583312716
AUROC: 0.699809254680325
AUPRC: 0.33919709122455227
Sensitivity: 0.6350877192982456
Specificity: 0.6651006711409396
Threshold: 0.09
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.37it/s]
Loss: 0.42384179793298243
AUROC: 0.7342016527622971
AUPRC: 0.3622082319008627
Sensitivity: 0.6630695443645084
Specificity: 0.6859154929577465
Threshold: 0.09
Accuracy:  0.682175107970161

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0054.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
Loss: 0.4327816367149353
AUROC: 0.6983303897327211
AUPRC: 0.3332040841665813
Sensitivity: 0.6456140350877193
Specificity: 0.6630872483221476
Threshold: 0.09
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4334256313741207
AUROC: 0.7336418189392149
AUPRC: 0.3593775481080229
Sensitivity: 0.670263788968825
Specificity: 0.6828638497652583
Threshold: 0.09
Accuracy:  0.6808009422850412

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0055.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4166760593652725
AUROC: 0.698318615330272
AUPRC: 0.3314084610172525
Sensitivity: 0.6596491228070176
Specificity: 0.6456375838926175
Threshold: 0.15
Accuracy:  0.647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4178778599947691
AUROC: 0.7322595444770943
AUPRC: 0.3539157318447854
Sensitivity: 0.684652278177458
Specificity: 0.6615023474178404
Threshold: 0.15
Accuracy:  0.6652925009815469

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0056.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4236697937761034
AUROC: 0.6955681149181678
AUPRC: 0.3262750239617742
Sensitivity: 0.631578947368421
Specificity: 0.6671140939597315
Threshold: 0.13
Accuracy:  0.6614084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.41it/s]
Loss: 0.4255797673016787
AUROC: 0.7297034203623017
AUPRC: 0.3486489580261132
Sensitivity: 0.6522781774580336
Specificity: 0.6863849765258216
Threshold: 0.13
Accuracy:  0.6808009422850412

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0057.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.41760071899209705
AUROC: 0.6925821264570824
AUPRC: 0.32754420241859894
Sensitivity: 0.6421052631578947
Specificity: 0.6429530201342282
Threshold: 0.12
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.41782367751002314
AUROC: 0.7378711115614551
AUPRC: 0.36093391787816287
Sensitivity: 0.6786570743405276
Specificity: 0.655868544600939
Threshold: 0.12
Accuracy:  0.6595995288574794

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0058.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4144883815731321
AUROC: 0.6989120452137053
AUPRC: 0.3377262464931947
Sensitivity: 0.631578947368421
Specificity: 0.6664429530201342
Threshold: 0.13
Accuracy:  0.6608450704225353

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.4131011925637722
AUROC: 0.7342737077943279
AUPRC: 0.3608936773051314
Sensitivity: 0.6690647482014388
Specificity: 0.6814553990610329
Threshold: 0.13
Accuracy:  0.6794267765999215

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0059.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.39it/s]
Loss: 0.41007634145872934
AUROC: 0.6963263864358884
AUPRC: 0.33346271102977343
Sensitivity: 0.656140350877193
Specificity: 0.6214765100671141
Threshold: 0.14
Accuracy:  0.6270422535211267

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.39it/s]
Loss: 0.40461837984621524
AUROC: 0.7381190821990294
AUPRC: 0.36335766863642466
Sensitivity: 0.645083932853717
Specificity: 0.7075117370892019
Threshold: 0.15
Accuracy:  0.6972909305064782

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0060.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.4593232295342854
AUROC: 0.6986176851524786
AUPRC: 0.3315570943841276
Sensitivity: 0.6491228070175439
Specificity: 0.6503355704697986
Threshold: 0.32
Accuracy:  0.6501408450704226

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.44473008438944817
AUROC: 0.7367088019725064
AUPRC: 0.36248449781039915
Sensitivity: 0.6738609112709832
Specificity: 0.6713615023474179
Threshold: 0.32
Accuracy:  0.6717707106399686

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0061.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
Loss: 0.41062817190374645
AUROC: 0.6985140704109266
AUPRC: 0.33973657254336065
Sensitivity: 0.6526315789473685
Specificity: 0.6395973154362417
Threshold: 0.13
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.4076663114130497
AUROC: 0.7381300593328154
AUPRC: 0.36532934695627406
Sensitivity: 0.6882494004796164
Specificity: 0.6542253521126761
Threshold: 0.13
Accuracy:  0.6597958382410679

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0062.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4052552282810211
AUROC: 0.698052513834923
AUPRC: 0.3381753289652224
Sensitivity: 0.6350877192982456
Specificity: 0.663758389261745
Threshold: 0.17
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.41it/s]
Loss: 0.39721145778894423
AUROC: 0.7378249513065603
AUPRC: 0.36522705827635443
Sensitivity: 0.6618705035971223
Specificity: 0.6847417840375587
Threshold: 0.17
Accuracy:  0.6809972516686298

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0063.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
Loss: 0.4067698121070862
AUROC: 0.6962557400211938
AUPRC: 0.3300518340107547
Sensitivity: 0.6210526315789474
Specificity: 0.6798657718120805
Threshold: 0.17
Accuracy:  0.6704225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.40334725975990293
AUROC: 0.7382032402247217
AUPRC: 0.36324409916267053
Sensitivity: 0.6498800959232613
Specificity: 0.6971830985915493
Threshold: 0.17
Accuracy:  0.6894385551629368

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0064.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
Loss: 0.4210286076579775
AUROC: 0.6957941834451901
AUPRC: 0.3288725244062738
Sensitivity: 0.6701754385964912
Specificity: 0.640268456375839
Threshold: 0.13
Accuracy:  0.6450704225352113

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.42it/s]
Loss: 0.42257190868258476
AUROC: 0.730779601670776
AUPRC: 0.35423414808448905
Sensitivity: 0.6738609112709832
Specificity: 0.6593896713615024
Threshold: 0.13
Accuracy:  0.6617589320769532

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0065.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
Loss: 0.4109899933849062
AUROC: 0.6977298952078183
AUPRC: 0.3418027210756336
Sensitivity: 0.6596491228070176
Specificity: 0.6241610738255033
Threshold: 0.12
Accuracy:  0.6298591549295774

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.46it/s]
Loss: 0.40726362355053425
AUROC: 0.7364905258891479
AUPRC: 0.36442658050925175
Sensitivity: 0.7062350119904077
Specificity: 0.6354460093896713
Threshold: 0.12
Accuracy:  0.6470357283078131


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      45, 0.404
  Epoch with best model Test AUROC:     47, 0.7385
  Epoch with best model Test Accuracy:  22, 0.6993

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   45, 0.404
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0045.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.38it/s]
Loss: 0.3969287659972906
AUROC: 0.737732630796771
AUPRC: 0.3649217752953224
Sensitivity: 0.6642685851318945
Specificity: 0.6786384976525821
Threshold: 0.15
Accuracy:  0.6762858264625049
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.737732630796771
best_model_val_test_auprc: 0.3649217752953224

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  47, 0.7385
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/ABP_EEG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_4c527f9b_0047.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:16<00:00,  2.40it/s]
Loss: 0.40305305942893027
AUROC: 0.7384779500343387
AUPRC: 0.36396038324674473
Sensitivity: 0.7134292565947242
Specificity: 0.6326291079812206
Threshold: 0.13
Accuracy:  0.6458578720062819
best_model_auroc_test_auroc: 0.7384779500343387
best_model_auroc_test_auprc: 0.36396038324674473

Total Processing Time: 4828.9950 sec
In [105]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=False, 
        useEeg=True, 
        useEcg=True,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           False
  use_eeg:           True
  use_ecg:           True
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (ecgResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (ecgFc): Linear(in_features=2814, out_features=32, bias=True)
  (eegResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
  )
  (eegFc): Linear(in_features=720, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=64, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.88it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 15:39:43.607900] Completed epoch 0 with training loss 0.47759277, validation loss 0.48341626
Validation loss improved to 0.48341626. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 15:40:31.583238] Completed epoch 1 with training loss 0.45718202, validation loss 0.47720009
Validation loss improved to 0.47720009. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:41:19.554819] Completed epoch 2 with training loss 0.45581597, validation loss 0.47240219
Validation loss improved to 0.47240219. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 15:42:07.738252] Completed epoch 3 with training loss 0.45171013, validation loss 0.46912676
Validation loss improved to 0.46912676. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 15:42:55.743252] Completed epoch 4 with training loss 0.44971853, validation loss 0.46825013
Validation loss improved to 0.46825013. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 15:43:43.844071] Completed epoch 5 with training loss 0.44892043, validation loss 0.46432605
Validation loss improved to 0.46432605. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
[2024-05-04 15:44:31.816539] Completed epoch 6 with training loss 0.44778243, validation loss 0.46210024
Validation loss improved to 0.46210024. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:45:19.899470] Completed epoch 7 with training loss 0.44609165, validation loss 0.46128020
Validation loss improved to 0.46128020. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.92it/s]
[2024-05-04 15:46:09.721455] Completed epoch 8 with training loss 0.44433504, validation loss 0.46066871
Validation loss improved to 0.46066871. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.46it/s]
[2024-05-04 15:46:57.540463] Completed epoch 9 with training loss 0.44377351, validation loss 0.45777193
Validation loss improved to 0.45777193. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.40it/s]
[2024-05-04 15:47:45.645267] Completed epoch 10 with training loss 0.44432458, validation loss 0.45922732
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:48:33.637288] Completed epoch 11 with training loss 0.44267330, validation loss 0.45977718
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:49:21.639263] Completed epoch 12 with training loss 0.44368523, validation loss 0.45649102
Validation loss improved to 0.45649102. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 15:50:09.750838] Completed epoch 13 with training loss 0.44254375, validation loss 0.45661703
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.47it/s]
[2024-05-04 15:50:57.655216] Completed epoch 14 with training loss 0.44144458, validation loss 0.45602846
Validation loss improved to 0.45602846. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:51:45.946838] Completed epoch 15 with training loss 0.44272166, validation loss 0.45458245
Validation loss improved to 0.45458245. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
[2024-05-04 15:52:33.896258] Completed epoch 16 with training loss 0.44165507, validation loss 0.45631614
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.87it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 15:53:22.547743] Completed epoch 17 with training loss 0.44077605, validation loss 0.45553398
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.44it/s]
[2024-05-04 15:54:10.765660] Completed epoch 18 with training loss 0.44102487, validation loss 0.45828894
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 15:54:58.781346] Completed epoch 19 with training loss 0.44231644, validation loss 0.45513892
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.38it/s]
[2024-05-04 15:55:47.113477] Completed epoch 20 with training loss 0.44073552, validation loss 0.45570758
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
[2024-05-04 15:56:35.230080] Completed epoch 21 with training loss 0.44084033, validation loss 0.45901194
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.90it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 15:57:23.156013] Completed epoch 22 with training loss 0.44114083, validation loss 0.45404449
Validation loss improved to 0.45404449. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.88it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.45it/s]
[2024-05-04 15:58:11.477805] Completed epoch 23 with training loss 0.44082299, validation loss 0.45592996
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:42<00:00,  1.89it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 15:59:00.067890] Completed epoch 24 with training loss 0.43961257, validation loss 0.45362648
Validation loss improved to 0.45362648. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.66it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
[2024-05-04 15:59:54.388673] Completed epoch 25 with training loss 0.44068918, validation loss 0.45488876
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.68it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.34it/s]
[2024-05-04 16:00:48.176260] Completed epoch 26 with training loss 0.44081122, validation loss 0.45482969
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.65it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 16:01:42.880919] Completed epoch 27 with training loss 0.44003171, validation loss 0.45208177
Validation loss improved to 0.45208177. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.64it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 16:02:37.960580] Completed epoch 28 with training loss 0.44031906, validation loss 0.45570675
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 16:03:31.653109] Completed epoch 29 with training loss 0.44010419, validation loss 0.45472080
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.66it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.41it/s]
[2024-05-04 16:04:25.781954] Completed epoch 30 with training loss 0.43902731, validation loss 0.45468166
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.64it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 16:05:20.706776] Completed epoch 31 with training loss 0.43964499, validation loss 0.45264521
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.68it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 16:06:14.399433] Completed epoch 32 with training loss 0.43899250, validation loss 0.45421442
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.72it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 16:07:07.190305] Completed epoch 33 with training loss 0.43935791, validation loss 0.45504680
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.70it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 16:08:00.461841] Completed epoch 34 with training loss 0.43977767, validation loss 0.45509210
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.70it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.36it/s]
[2024-05-04 16:08:53.542073] Completed epoch 35 with training loss 0.43962517, validation loss 0.45534405
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.67it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 16:09:47.834115] Completed epoch 36 with training loss 0.43834409, validation loss 0.45442599
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.67it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 16:10:42.144711] Completed epoch 37 with training loss 0.43870926, validation loss 0.45203277
Validation loss improved to 0.45203277. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.71it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.32it/s]
[2024-05-04 16:11:35.230442] Completed epoch 38 with training loss 0.43831533, validation loss 0.45330122
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 16:12:28.961427] Completed epoch 39 with training loss 0.43785524, validation loss 0.45343131
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.73it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
[2024-05-04 16:13:21.723477] Completed epoch 40 with training loss 0.43756509, validation loss 0.44731706
Validation loss improved to 0.44731706. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.68it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
[2024-05-04 16:14:15.701739] Completed epoch 41 with training loss 0.43707284, validation loss 0.44843403
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:49<00:00,  1.63it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 16:15:11.154573] Completed epoch 42 with training loss 0.43760210, validation loss 0.44900185
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.70it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 16:16:04.571807] Completed epoch 43 with training loss 0.43712863, validation loss 0.44613644
Validation loss improved to 0.44613644. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.70it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 16:16:58.140577] Completed epoch 44 with training loss 0.43614212, validation loss 0.44443324
Validation loss improved to 0.44443324. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.72it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 16:17:51.269430] Completed epoch 45 with training loss 0.43600297, validation loss 0.45465785
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.66it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.42it/s]
[2024-05-04 16:18:45.402962] Completed epoch 46 with training loss 0.43667784, validation loss 0.45233634
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 16:19:39.203795] Completed epoch 47 with training loss 0.43558139, validation loss 0.45306131
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 16:20:32.783682] Completed epoch 48 with training loss 0.43608832, validation loss 0.46504053
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 16:21:26.570462] Completed epoch 49 with training loss 0.43626219, validation loss 0.46441367
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.71it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 16:22:19.700050] Completed epoch 50 with training loss 0.43662125, validation loss 0.47154784
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.66it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 16:23:14.356276] Completed epoch 51 with training loss 0.43591404, validation loss 0.47455576
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.64it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 16:24:09.255538] Completed epoch 52 with training loss 0.43515548, validation loss 0.48481980
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 16:25:02.923876] Completed epoch 53 with training loss 0.43569413, validation loss 0.49652091
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 16:25:56.600967] Completed epoch 54 with training loss 0.43571448, validation loss 0.48276678
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.67it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 16:26:50.719716] Completed epoch 55 with training loss 0.43468601, validation loss 0.48674414
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.72it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 16:27:43.534267] Completed epoch 56 with training loss 0.43636808, validation loss 0.47572497
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 16:28:37.418727] Completed epoch 57 with training loss 0.43559799, validation loss 0.49969086
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:48<00:00,  1.66it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 16:29:32.054576] Completed epoch 58 with training loss 0.43505508, validation loss 0.50092405
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.67it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 16:30:26.260188] Completed epoch 59 with training loss 0.43544030, validation loss 0.51004487
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.67it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 16:31:20.684234] Completed epoch 60 with training loss 0.43478888, validation loss 0.50288284
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.71it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 16:32:13.737376] Completed epoch 61 with training loss 0.43467635, validation loss 0.49058586
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:47<00:00,  1.69it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.35it/s]
[2024-05-04 16:33:07.036765] Completed epoch 62 with training loss 0.43367061, validation loss 0.50157756
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:46<00:00,  1.71it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 16:34:00.310494] Completed epoch 63 with training loss 0.43431631, validation loss 0.50388724
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:45<00:00,  1.75it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 16:34:52.289915] Completed epoch 64 with training loss 0.43499917, validation loss 0.48996824
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   44, 0.4444
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.48it/s]
Loss: 0.48387089371681213
AUROC: 0.479719769221712
AUPRC: 0.1591201327975818
Sensitivity: 0.48771929824561405
Specificity: 0.4738255033557047
Threshold: 0.25
Accuracy:  0.476056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.35it/s]
Loss: 0.47857600450515747
AUROC: 0.5017774512784139
AUPRC: 0.16781498028462427
Sensitivity: 0.5215827338129496
Specificity: 0.46737089201877935
Threshold: 0.25
Accuracy:  0.4762465645857872

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.07it/s]
Loss: 0.4775451677186148
AUROC: 0.478624749793948
AUPRC: 0.15855763004251877
Sensitivity: 0.49122807017543857
Specificity: 0.4704697986577181
Threshold: 0.24
Accuracy:  0.47380281690140846

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.20it/s]
Loss: 0.47308252453804017
AUROC: 0.5040705463797975
AUPRC: 0.16897199263437584
Sensitivity: 0.526378896882494
Specificity: 0.4715962441314554
Threshold: 0.24
Accuracy:  0.48056537102473496

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.47238094891820637
AUROC: 0.47741905098316256
AUPRC: 0.15826573333547606
Sensitivity: 0.45964912280701753
Specificity: 0.508724832214765
Threshold: 0.23
Accuracy:  0.5008450704225352

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.46748812198638917
AUROC: 0.5057613064477995
AUPRC: 0.17097328387795652
Sensitivity: 0.5035971223021583
Specificity: 0.5089201877934272
Threshold: 0.23
Accuracy:  0.5080486847271299

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.4687697099787848
AUROC: 0.47693394560226066
AUPRC: 0.1584002789359853
Sensitivity: 0.4982456140350877
Specificity: 0.4671140939597315
Threshold: 0.22
Accuracy:  0.47211267605633805

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.46447575464844704
AUROC: 0.5079001587462424
AUPRC: 0.17187414461900705
Sensitivity: 0.5335731414868106
Specificity: 0.46924882629107983
Threshold: 0.22
Accuracy:  0.47978013349038084

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.46932984462806154
AUROC: 0.476904509596138
AUPRC: 0.15817520746586533
Sensitivity: 0.5157894736842106
Specificity: 0.44563758389261743
Threshold: 0.22
Accuracy:  0.4569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.20it/s]
Loss: 0.46372720301151277
AUROC: 0.5099134776685694
AUPRC: 0.17304254538968739
Sensitivity: 0.473621103117506
Specificity: 0.5410798122065728
Threshold: 0.23
Accuracy:  0.5300353356890459

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.46386235313756125
AUROC: 0.4766419404215236
AUPRC: 0.15825895488240843
Sensitivity: 0.45263157894736844
Specificity: 0.5221476510067115
Threshold: 0.22
Accuracy:  0.5109859154929578

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.46018842086195944
AUROC: 0.5129438702559079
AUPRC: 0.1743709536882699
Sensitivity: 0.4988009592326139
Specificity: 0.5232394366197183
Threshold: 0.22
Accuracy:  0.5192383195916764

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4608527741261891
AUROC: 0.4768209113387495
AUPRC: 0.1609190624712724
Sensitivity: 0.48771929824561405
Specificity: 0.4885906040268456
Threshold: 0.21
Accuracy:  0.48845070422535214

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.45754748955368996
AUROC: 0.5154983055808874
AUPRC: 0.1760999500852201
Sensitivity: 0.5239808153477218
Specificity: 0.49483568075117373
Threshold: 0.21
Accuracy:  0.49960738123282294

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.46036385212625774
AUROC: 0.476674908748381
AUPRC: 0.1606468644341384
Sensitivity: 0.45263157894736844
Specificity: 0.5248322147651007
Threshold: 0.21
Accuracy:  0.5132394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.4562488108873367
AUROC: 0.5180739915110165
AUPRC: 0.1763008338995866
Sensitivity: 0.4952038369304556
Specificity: 0.5269953051643192
Threshold: 0.21
Accuracy:  0.5217903415783275

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4613512435129711
AUROC: 0.476929235841281
AUPRC: 0.1604893459509285
Sensitivity: 0.45614035087719296
Specificity: 0.5100671140939598
Threshold: 0.21
Accuracy:  0.5014084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.45622318610548973
AUROC: 0.5203255705294919
AUPRC: 0.17688489930269163
Sensitivity: 0.5071942446043165
Specificity: 0.5145539906103287
Threshold: 0.21
Accuracy:  0.5133490380840204

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
Loss: 0.45788336651665823
AUROC: 0.47621099729188743
AUPRC: 0.1603861163849486
Sensitivity: 0.47368421052631576
Specificity: 0.48053691275167787
Threshold: 0.2
Accuracy:  0.47943661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4533564820885658
AUROC: 0.5245944089798583
AUPRC: 0.18014138940426996
Sensitivity: 0.5335731414868106
Specificity: 0.49272300469483565
Threshold: 0.2
Accuracy:  0.4994110718492344

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.45926753537995474
AUROC: 0.47712233604144594
AUPRC: 0.16022123810883476
Sensitivity: 0.47017543859649125
Specificity: 0.4919463087248322
Threshold: 0.21
Accuracy:  0.48845070422535214

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4549259044229984
AUROC: 0.5272683261841231
AUPRC: 0.18215021767163284
Sensitivity: 0.5191846522781774
Specificity: 0.5075117370892018
Threshold: 0.21
Accuracy:  0.5094228504122497

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.45933779435498373
AUROC: 0.4777793476981043
AUPRC: 0.16012828584757874
Sensitivity: 0.4631578947368421
Specificity: 0.49798657718120803
Threshold: 0.21
Accuracy:  0.4923943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.45439579263329505
AUROC: 0.529600967113633
AUPRC: 0.18304023841959072
Sensitivity: 0.513189448441247
Specificity: 0.5154929577464789
Threshold: 0.21
Accuracy:  0.5151158225363173

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.45693741738796234
AUROC: 0.4781054986459437
AUPRC: 0.15984994468425803
Sensitivity: 0.5228070175438596
Specificity: 0.4395973154362416
Threshold: 0.2
Accuracy:  0.4529577464788732

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4527411818504333
AUROC: 0.5330325880140958
AUPRC: 0.1852936527479479
Sensitivity: 0.5827338129496403
Specificity: 0.45892018779342725
Threshold: 0.2
Accuracy:  0.47919120533961523

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.4563600548676082
AUROC: 0.4789862239491346
AUPRC: 0.15715184725742876
Sensitivity: 0.4807017543859649
Specificity: 0.48590604026845635
Threshold: 0.2
Accuracy:  0.48507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.451253517717123
AUROC: 0.5373384391078686
AUPRC: 0.18453255764127657
Sensitivity: 0.5323741007194245
Specificity: 0.5039906103286385
Threshold: 0.2
Accuracy:  0.5086376128778956

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
Loss: 0.45535482253347126
AUROC: 0.48070881902743434
AUPRC: 0.1571063447216902
Sensitivity: 0.47719298245614034
Specificity: 0.47449664429530203
Threshold: 0.2
Accuracy:  0.47492957746478875

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.45063277930021284
AUROC: 0.5421735850756015
AUPRC: 0.1866944301644136
Sensitivity: 0.5419664268585132
Specificity: 0.5044600938967136
Threshold: 0.2
Accuracy:  0.5106007067137809

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.4562144492353712
AUROC: 0.48222653950312033
AUPRC: 0.1569363417231522
Sensitivity: 0.5228070175438596
Specificity: 0.42818791946308726
Threshold: 0.2
Accuracy:  0.4433802816901408

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.45070908293128015
AUROC: 0.5465396696727125
AUPRC: 0.187808987382199
Sensitivity: 0.5851318944844125
Specificity: 0.4737089201877934
Threshold: 0.2
Accuracy:  0.49195131527287006

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.4565611864839281
AUROC: 0.4832061697868833
AUPRC: 0.1564448088800786
Sensitivity: 0.43508771929824563
Specificity: 0.5416107382550336
Threshold: 0.21
Accuracy:  0.5245070422535211

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4513151004910469
AUROC: 0.5476568041341575
AUPRC: 0.1876074757302062
Sensitivity: 0.4904076738609113
Specificity: 0.5737089201877934
Threshold: 0.21
Accuracy:  0.5600706713780919

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4550740569829941
AUROC: 0.4842305427999529
AUPRC: 0.1568692580453061
Sensitivity: 0.47368421052631576
Specificity: 0.4899328859060403
Threshold: 0.2
Accuracy:  0.48732394366197185

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.45004149749875066
AUROC: 0.5477000090068791
AUPRC: 0.18698878942532032
Sensitivity: 0.5335731414868106
Specificity: 0.5352112676056338
Threshold: 0.2
Accuracy:  0.5349430702787593

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.45883367529937197
AUROC: 0.4862274814553161
AUPRC: 0.156595134747787
Sensitivity: 0.4842105263157895
Specificity: 0.47248322147651006
Threshold: 0.22
Accuracy:  0.4743661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.45373095348477366
AUROC: 0.5566653719278098
AUPRC: 0.1916042656817598
Sensitivity: 0.5611510791366906
Specificity: 0.5295774647887324
Threshold: 0.22
Accuracy:  0.5347467608951708

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.45447646507195066
AUROC: 0.48738137289532557
AUPRC: 0.15680776117649645
Sensitivity: 0.48771929824561405
Specificity: 0.48590604026845635
Threshold: 0.2
Accuracy:  0.48619718309859156

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.44894259572029116
AUROC: 0.5565078922777271
AUPRC: 0.1914966022569864
Sensitivity: 0.5491606714628298
Specificity: 0.5415492957746478
Threshold: 0.2
Accuracy:  0.5427954456223008

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.45595786401203703
AUROC: 0.4879371246909219
AUPRC: 0.1569712822275386
Sensitivity: 0.5263157894736842
Specificity: 0.41879194630872485
Threshold: 0.2
Accuracy:  0.436056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4499681368470192
AUROC: 0.556748263361142
AUPRC: 0.19119235144571547
Sensitivity: 0.4856115107913669
Specificity: 0.6061032863849766
Threshold: 0.21
Accuracy:  0.5863761287789556

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.45840179920196533
AUROC: 0.4895973154362416
AUPRC: 0.15775687286054169
Sensitivity: 0.48771929824561405
Specificity: 0.48053691275167787
Threshold: 0.22
Accuracy:  0.48169014084507045

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4533163994550705
AUROC: 0.5609481428941354
AUPRC: 0.19307366312590118
Sensitivity: 0.565947242206235
Specificity: 0.530281690140845
Threshold: 0.22
Accuracy:  0.5361209265802905

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.4551604219845363
AUROC: 0.4899717414341222
AUPRC: 0.15773899228813446
Sensitivity: 0.47719298245614034
Specificity: 0.4899328859060403
Threshold: 0.2
Accuracy:  0.48788732394366197

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4483091615140438
AUROC: 0.5627134911788878
AUPRC: 0.19386820685642162
Sensitivity: 0.5587529976019184
Specificity: 0.5401408450704225
Threshold: 0.2
Accuracy:  0.5431880643894779

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.11it/s]
Loss: 0.45670147027288166
AUROC: 0.4913846697280113
AUPRC: 0.15812053448087626
Sensitivity: 0.45964912280701753
Specificity: 0.512751677852349
Threshold: 0.21
Accuracy:  0.504225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4496988758444786
AUROC: 0.5645523018205154
AUPRC: 0.19448791835755744
Sensitivity: 0.5347721822541966
Specificity: 0.5657276995305164
Threshold: 0.21
Accuracy:  0.5606595995288575

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.4549657830170223
AUROC: 0.49359119274696805
AUPRC: 0.1596064649775943
Sensitivity: 0.543859649122807
Specificity: 0.43288590604026844
Threshold: 0.2
Accuracy:  0.4507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.44833318665623667
AUROC: 0.571370931423875
AUPRC: 0.197954193208903
Sensitivity: 0.5
Specificity: 0.5957746478873239
Threshold: 0.21
Accuracy:  0.5800942285041225

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.4532593403543745
AUROC: 0.4942835276109737
AUPRC: 0.15980393317721991
Sensitivity: 0.4631578947368421
Specificity: 0.5416107382550336
Threshold: 0.2
Accuracy:  0.5290140845070422

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4468837060034275
AUROC: 0.5699181499870526
AUPRC: 0.19718877403891308
Sensitivity: 0.5227817745803357
Specificity: 0.5748826291079813
Threshold: 0.2
Accuracy:  0.566352571652925

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.45417858021599905
AUROC: 0.49581890969033326
AUPRC: 0.16055096860098506
Sensitivity: 0.4631578947368421
Specificity: 0.5449664429530201
Threshold: 0.21
Accuracy:  0.5318309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.44852899089455606
AUROC: 0.5715467062969343
AUPRC: 0.19814828701126125
Sensitivity: 0.5215827338129496
Specificity: 0.5753521126760563
Threshold: 0.21
Accuracy:  0.5665488810365136

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.45299006147044046
AUROC: 0.4975944895796538
AUPRC: 0.16153944510862828
Sensitivity: 0.5157894736842106
Specificity: 0.4697986577181208
Threshold: 0.19
Accuracy:  0.4771830985915493

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4457282774150372
AUROC: 0.5739495727361773
AUPRC: 0.19907116075127648
Sensitivity: 0.5755395683453237
Specificity: 0.5157276995305164
Threshold: 0.19
Accuracy:  0.5255202198665097

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.79it/s]
Loss: 0.4553914155278887
AUROC: 0.4978511715530437
AUPRC: 0.16110319608563833
Sensitivity: 0.4666666666666667
Specificity: 0.5261744966442953
Threshold: 0.21
Accuracy:  0.5166197183098592

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4486111097037792
AUROC: 0.5716004661059885
AUPRC: 0.19764874191042792
Sensitivity: 0.5335731414868106
Specificity: 0.5657276995305164
Threshold: 0.21
Accuracy:  0.560463290145269

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.45415106202874866
AUROC: 0.5002390203697162
AUPRC: 0.16233084175577642
Sensitivity: 0.5263157894736842
Specificity: 0.45234899328859063
Threshold: 0.2
Accuracy:  0.46422535211267607

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.44755090624094007
AUROC: 0.57498254917193
AUPRC: 0.19949648889138577
Sensitivity: 0.5059952038369304
Specificity: 0.6039906103286385
Threshold: 0.21
Accuracy:  0.587946603847664

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.45401823094912935
AUROC: 0.5005946073236783
AUPRC: 0.16178423531483455
Sensitivity: 0.5263157894736842
Specificity: 0.4651006711409396
Threshold: 0.2
Accuracy:  0.47492957746478875

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4472718290984631
AUROC: 0.5746539388207743
AUPRC: 0.1988472554775174
Sensitivity: 0.5887290167865707
Specificity: 0.5117370892018779
Threshold: 0.2
Accuracy:  0.5243423635649784

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.4525585344859532
AUROC: 0.5022265395031202
AUPRC: 0.16208779548913207
Sensitivity: 0.5263157894736842
Specificity: 0.4671140939597315
Threshold: 0.19
Accuracy:  0.47661971830985916

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.44553654715418817
AUROC: 0.5758503056709562
AUPRC: 0.19929290887320078
Sensitivity: 0.5971223021582733
Specificity: 0.5091549295774648
Threshold: 0.19
Accuracy:  0.5235571260306242

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.45289625227451324
AUROC: 0.5049087483810197
AUPRC: 0.163283164833257
Sensitivity: 0.48771929824561405
Specificity: 0.5395973154362416
Threshold: 0.2
Accuracy:  0.5312676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.4458286717534065
AUROC: 0.5780581168867722
AUPRC: 0.19978390226235415
Sensitivity: 0.5443645083932853
Specificity: 0.5636150234741784
Threshold: 0.2
Accuracy:  0.560463290145269

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.4539963794606073
AUROC: 0.5060979630283763
AUPRC: 0.16374458346518145
Sensitivity: 0.47017543859649125
Specificity: 0.561744966442953
Threshold: 0.21
Accuracy:  0.5470422535211268

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4472023844718933
AUROC: 0.5786383569200977
AUPRC: 0.1999112819493107
Sensitivity: 0.5251798561151079
Specificity: 0.5852112676056338
Threshold: 0.21
Accuracy:  0.5753828032979976

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4542401305266789
AUROC: 0.5061615448016014
AUPRC: 0.16352059554540324
Sensitivity: 0.47368421052631576
Specificity: 0.5577181208053691
Threshold: 0.21
Accuracy:  0.5442253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.44727270156145094
AUROC: 0.5782510611229327
AUPRC: 0.20041139243142378
Sensitivity: 0.5275779376498801
Specificity: 0.5786384976525821
Threshold: 0.21
Accuracy:  0.5702787593246957

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
Loss: 0.4542954925979887
AUROC: 0.5088625927234194
AUPRC: 0.1645175621677851
Sensitivity: 0.49473684210526314
Specificity: 0.5416107382550336
Threshold: 0.21
Accuracy:  0.5340845070422535

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.44748770296573637
AUROC: 0.5795376374956372
AUPRC: 0.20056915083297794
Sensitivity: 0.5539568345323741
Specificity: 0.5664319248826291
Threshold: 0.21
Accuracy:  0.5643894778170396

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.4537297146660941
AUROC: 0.5108218532909454
AUPRC: 0.16585218134618887
Sensitivity: 0.5368421052631579
Specificity: 0.49798657718120803
Threshold: 0.2
Accuracy:  0.504225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4461328245699406
AUROC: 0.5796521937379673
AUPRC: 0.20069810115660058
Sensitivity: 0.5887290167865707
Specificity: 0.5232394366197183
Threshold: 0.2
Accuracy:  0.5339615233608166

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.33it/s]
Loss: 0.452136938061033
AUROC: 0.5110020016484164
AUPRC: 0.16613862537224644
Sensitivity: 0.4982456140350877
Specificity: 0.5315436241610738
Threshold: 0.2
Accuracy:  0.5261971830985915

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.4456569626927376
AUROC: 0.579371573164004
AUPRC: 0.19995050554793148
Sensitivity: 0.552757793764988
Specificity: 0.5525821596244131
Threshold: 0.2
Accuracy:  0.5526109148017275

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.45324282135282246
AUROC: 0.5115777699281763
AUPRC: 0.16690971528651233
Sensitivity: 0.5649122807017544
Specificity: 0.4771812080536913
Threshold: 0.2
Accuracy:  0.49126760563380284

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.20it/s]
Loss: 0.44651502221822736
AUROC: 0.5802792976886096
AUPRC: 0.2014931174014455
Sensitivity: 0.5227817745803357
Specificity: 0.5880281690140845
Threshold: 0.21
Accuracy:  0.577345897133883

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.4523915925196239
AUROC: 0.5125103026021429
AUPRC: 0.16732908811568992
Sensitivity: 0.5403508771929825
Specificity: 0.49261744966442955
Threshold: 0.2
Accuracy:  0.5002816901408451

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.44621027931571006
AUROC: 0.5807258418617218
AUPRC: 0.2015589510443531
Sensitivity: 0.6031175059952039
Specificity: 0.5147887323943662
Threshold: 0.2
Accuracy:  0.5292500981546918

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.446679025888443
AUROC: 0.5156069704462498
AUPRC: 0.17166939426526573
Sensitivity: 0.4807017543859649
Specificity: 0.5295302013422819
Threshold: 0.18
Accuracy:  0.5216901408450704

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.4422034427523613
AUROC: 0.582328644126952
AUPRC: 0.2004039112302327
Sensitivity: 0.5611510791366906
Specificity: 0.5671361502347417
Threshold: 0.18
Accuracy:  0.5661562622693365

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.44824235141277313
AUROC: 0.5170269633816084
AUPRC: 0.17199179433444467
Sensitivity: 0.4631578947368421
Specificity: 0.5583892617449664
Threshold: 0.19
Accuracy:  0.5430985915492957

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4428164780139923
AUROC: 0.5810930129136127
AUPRC: 0.2005792993129035
Sensitivity: 0.5383693045563549
Specificity: 0.5732394366197183
Threshold: 0.19
Accuracy:  0.5675304279544562

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.44884686384882244
AUROC: 0.5180701754385965
AUPRC: 0.17368626077399824
Sensitivity: 0.5614035087719298
Specificity: 0.4966442953020134
Threshold: 0.19
Accuracy:  0.5070422535211268

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4440868474543095
AUROC: 0.5802850677204715
AUPRC: 0.19995489157288107
Sensitivity: 0.5947242206235012
Specificity: 0.5269953051643192
Threshold: 0.19
Accuracy:  0.5380840204161759

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.44663532291139874
AUROC: 0.5193653597079948
AUPRC: 0.172704136557912
Sensitivity: 0.5719298245614035
Specificity: 0.4671140939597315
Threshold: 0.18
Accuracy:  0.483943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.44314535781741143
AUROC: 0.5778743202621002
AUPRC: 0.2003243443655861
Sensitivity: 0.5155875299760192
Specificity: 0.6044600938967136
Threshold: 0.19
Accuracy:  0.5899096976835493

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.44451374879905153
AUROC: 0.5180372071117391
AUPRC: 0.17307011702052436
Sensitivity: 0.45614035087719296
Specificity: 0.5785234899328859
Threshold: 0.18
Accuracy:  0.5588732394366197

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4421113647520542
AUROC: 0.5763017754810236
AUPRC: 0.2000958414164014
Sensitivity: 0.5071942446043165
Specificity: 0.6140845070422535
Threshold: 0.18
Accuracy:  0.5965842167255595

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0045.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.45493222560201374
AUROC: 0.5195772989520782
AUPRC: 0.17216593449671053
Sensitivity: 0.519298245614035
Specificity: 0.5348993288590604
Threshold: 0.22
Accuracy:  0.532394366197183

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.45055304393172263
AUROC: 0.5771411040181939
AUPRC: 0.20025933808111562
Sensitivity: 0.5551558752997602
Specificity: 0.5497652582159624
Threshold: 0.22
Accuracy:  0.5506478209658422

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0046.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.4516739994287491
AUROC: 0.520917225950783
AUPRC: 0.1737521206096092
Sensitivity: 0.5298245614035088
Specificity: 0.5288590604026846
Threshold: 0.21
Accuracy:  0.5290140845070422

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.447105710208416
AUROC: 0.5796127886423256
AUPRC: 0.2016801806688958
Sensitivity: 0.5671462829736211
Specificity: 0.5504694835680751
Threshold: 0.21
Accuracy:  0.5531998429524931

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0047.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
Loss: 0.4521224158150809
AUROC: 0.5200671140939598
AUPRC: 0.17351154372219965
Sensitivity: 0.5789473684210527
Specificity: 0.4791946308724832
Threshold: 0.21
Accuracy:  0.4952112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.34it/s]
Loss: 0.44867030158638954
AUROC: 0.5772776145280958
AUPRC: 0.20123889687740443
Sensitivity: 0.5095923261390888
Specificity: 0.5950704225352113
Threshold: 0.22
Accuracy:  0.5810757754220651

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0048.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.4649905094078609
AUROC: 0.5193488755445661
AUPRC: 0.17067714859013888
Sensitivity: 0.5052631578947369
Specificity: 0.536241610738255
Threshold: 0.25
Accuracy:  0.5312676056338028

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.19it/s]
Loss: 0.46165806502103807
AUROC: 0.5745968014320937
AUPRC: 0.19908344954406657
Sensitivity: 0.5383693045563549
Specificity: 0.5619718309859155
Threshold: 0.25
Accuracy:  0.5581075775422065

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0049.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.46408368008477346
AUROC: 0.5207688684799247
AUPRC: 0.17339709143348486
Sensitivity: 0.47017543859649125
Specificity: 0.5590604026845638
Threshold: 0.25
Accuracy:  0.5447887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.46128049343824384
AUROC: 0.5763112045574807
AUPRC: 0.2002789224827684
Sensitivity: 0.5275779376498801
Specificity: 0.5751173708920188
Threshold: 0.25
Accuracy:  0.5673341185708677

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0050.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.32it/s]
Loss: 0.4720078877040318
AUROC: 0.5211432944778052
AUPRC: 0.17133281254265115
Sensitivity: 0.5368421052631579
Specificity: 0.49731543624161073
Threshold: 0.26
Accuracy:  0.5036619718309859

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.46656275540590286
AUROC: 0.5750903502550072
AUPRC: 0.19829319251683503
Sensitivity: 0.5671462829736211
Specificity: 0.5359154929577464
Threshold: 0.26
Accuracy:  0.5410286611700039

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0051.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.47487602276461466
AUROC: 0.5192417284822796
AUPRC: 0.17089348814698144
Sensitivity: 0.519298245614035
Specificity: 0.521476510067114
Threshold: 0.27
Accuracy:  0.5211267605633803

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.471784558147192
AUROC: 0.5706918971864762
AUPRC: 0.20224871218615237
Sensitivity: 0.5515587529976019
Specificity: 0.5467136150234742
Threshold: 0.27
Accuracy:  0.5475068708284256

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0052.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.4841533771583012
AUROC: 0.5199081596608971
AUPRC: 0.1709217162531117
Sensitivity: 0.5403508771929825
Specificity: 0.5033557046979866
Threshold: 0.29
Accuracy:  0.5092957746478873

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4801922105252743
AUROC: 0.5735726911428604
AUPRC: 0.2030807369487415
Sensitivity: 0.5587529976019184
Specificity: 0.5408450704225352
Threshold: 0.29
Accuracy:  0.5437769925402435

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0053.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.49678230924265726
AUROC: 0.5221064405981397
AUPRC: 0.17145686327127724
Sensitivity: 0.5508771929824562
Specificity: 0.4919463087248322
Threshold: 0.31
Accuracy:  0.5014084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.4904314994812012
AUROC: 0.574661256909965
AUPRC: 0.20333719542352413
Sensitivity: 0.5695443645083933
Specificity: 0.5274647887323943
Threshold: 0.31
Accuracy:  0.5343541421279937

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0054.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.48358527038778576
AUROC: 0.5231284587307194
AUPRC: 0.1722877859555556
Sensitivity: 0.5333333333333333
Specificity: 0.5228187919463088
Threshold: 0.29
Accuracy:  0.5245070422535211

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.47834405303001404
AUROC: 0.5775345920446742
AUPRC: 0.2051921096714185
Sensitivity: 0.5539568345323741
Specificity: 0.5539906103286385
Threshold: 0.29
Accuracy:  0.5539850804868472

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0055.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
Loss: 0.48634699412754606
AUROC: 0.5241504768632992
AUPRC: 0.17302119802536456
Sensitivity: 0.4842105263157895
Specificity: 0.5671140939597316
Threshold: 0.3
Accuracy:  0.5538028169014084

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4825724415481091
AUROC: 0.5781532520462503
AUPRC: 0.20555082218846848
Sensitivity: 0.5167865707434053
Specificity: 0.594131455399061
Threshold: 0.3
Accuracy:  0.5814683941892422

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0056.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.475396277649062
AUROC: 0.524955845990816
AUPRC: 0.17301607646835046
Sensitivity: 0.4807017543859649
Specificity: 0.5570469798657718
Threshold: 0.28
Accuracy:  0.5447887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.47233995646238325
AUROC: 0.5788343972709157
AUPRC: 0.20554770223820634
Sensitivity: 0.5203836930455635
Specificity: 0.5870892018779342
Threshold: 0.28
Accuracy:  0.5761680408323517

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0057.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
Loss: 0.4998211477484022
AUROC: 0.5212657482632757
AUPRC: 0.1781364853977645
Sensitivity: 0.519298245614035
Specificity: 0.5315436241610738
Threshold: 0.32
Accuracy:  0.5295774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.49502731263637545
AUROC: 0.5793659438646266
AUPRC: 0.19980760942609882
Sensitivity: 0.5551558752997602
Specificity: 0.5657276995305164
Threshold: 0.32
Accuracy:  0.5639968590498626

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0058.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.5006546463285174
AUROC: 0.5250041210408571
AUPRC: 0.1735765434395562
Sensitivity: 0.5368421052631579
Specificity: 0.5248322147651007
Threshold: 0.32
Accuracy:  0.5267605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.31it/s]
Loss: 0.4970826394855976
AUROC: 0.580551474313507
AUPRC: 0.20033680677126603
Sensitivity: 0.5623501199040767
Specificity: 0.5605633802816902
Threshold: 0.32
Accuracy:  0.560855908912446

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0059.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.5102130983557019
AUROC: 0.5213458141999293
AUPRC: 0.17345479993755222
Sensitivity: 0.5017543859649123
Specificity: 0.548993288590604
Threshold: 0.33
Accuracy:  0.5414084507042254

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.22it/s]
Loss: 0.5099258258938789
AUROC: 0.5674395694711836
AUPRC: 0.19736602688949229
Sensitivity: 0.5203836930455635
Specificity: 0.578169014084507
Threshold: 0.33
Accuracy:  0.5687082842559874

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0060.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.5024183541536331
AUROC: 0.5253279171082067
AUPRC: 0.1728435535832488
Sensitivity: 0.5578947368421052
Specificity: 0.5073825503355704
Threshold: 0.32
Accuracy:  0.5154929577464789

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.33it/s]
Loss: 0.49913459122180937
AUROC: 0.5770970547505657
AUPRC: 0.19786230098297308
Sensitivity: 0.5635491606714629
Specificity: 0.5345070422535211
Threshold: 0.32
Accuracy:  0.5392618767177071

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0061.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
Loss: 0.49067844237600056
AUROC: 0.5263687742847052
AUPRC: 0.17058768002605945
Sensitivity: 0.5684210526315789
Specificity: 0.4899328859060403
Threshold: 0.3
Accuracy:  0.5025352112676056

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4859928719699383
AUROC: 0.5838057722835815
AUPRC: 0.20110013770393403
Sensitivity: 0.5959232613908872
Specificity: 0.5274647887323943
Threshold: 0.3
Accuracy:  0.5386729485669415

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0062.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
Loss: 0.5015568009444645
AUROC: 0.5264511951018486
AUPRC: 0.1706592147050433
Sensitivity: 0.543859649122807
Specificity: 0.5234899328859061
Threshold: 0.32
Accuracy:  0.5267605633802817

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.49838195741176605
AUROC: 0.5796167291518898
AUPRC: 0.19701437543332379
Sensitivity: 0.5539568345323741
Specificity: 0.5584507042253521
Threshold: 0.32
Accuracy:  0.5577149587750294

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0063.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.37it/s]
Loss: 0.5043409722191947
AUROC: 0.5256163899682091
AUPRC: 0.171665409397249
Sensitivity: 0.6105263157894737
Specificity: 0.4436241610738255
Threshold: 0.32
Accuracy:  0.4704225352112676

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.23it/s]
Loss: 0.5011716410517693
AUROC: 0.5854600826381149
AUPRC: 0.2056262303154433
Sensitivity: 0.645083932853717
Specificity: 0.4983568075117371
Threshold: 0.32
Accuracy:  0.5223792697290931

Intermediate Model:
  ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0064.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.48964149398463114
AUROC: 0.5234369480748852
AUPRC: 0.16978378458208593
Sensitivity: 0.5508771929824562
Specificity: 0.5020134228187919
Threshold: 0.3
Accuracy:  0.5098591549295775

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.48662878945469856
AUROC: 0.583719221805654
AUPRC: 0.2029269423838065
Sensitivity: 0.5851318944844125
Specificity: 0.5375586854460094
Threshold: 0.3
Accuracy:  0.5453474676089517


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      44, 0.4444
  Epoch with best model Test AUROC:     63, 0.5855
  Epoch with best model Test Accuracy:  44, 0.5966

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   44, 0.4444
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0044.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.25it/s]
Loss: 0.4421113647520542
AUROC: 0.5763017754810236
AUPRC: 0.2000958414164014
Sensitivity: 0.5071942446043165
Specificity: 0.6140845070422535
Threshold: 0.18
Accuracy:  0.5965842167255595
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.5763017754810236
best_model_val_test_auprc: 0.2000958414164014

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  63, 0.5855
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_2bb1d44d_0063.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.5011716410517693
AUROC: 0.5854600826381149
AUPRC: 0.2056262303154433
Sensitivity: 0.645083932853717
Specificity: 0.4983568075117371
Threshold: 0.32
Accuracy:  0.5223792697290931
best_model_auroc_test_auroc: 0.5854600826381149
best_model_auroc_test_auprc: 0.2056262303154433

Total Processing Time: 5013.1390 sec
In [106]:
RUN_ME = True

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=True, 
        useEcg=True,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=1e-1,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
Experiment Setup
  name:              ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b
  prediction_window: 015
  max_cases:         _ALL
  use_abp:           True
  use_eeg:           True
  use_ecg:           True
  n_residuals:       12
  skip_connection:   False
  batch_size:        128
  learning_rate:     0.0001
  weight_decay:      0.1
  balance_labels:    False
  max_epochs:        200
  patience:          20
  device:            mps

Model Architecture
HypotensionCNN(
  (abpResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (abpFc): Linear(in_features=2814, out_features=32, bias=True)
  (ecgResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(15,), stride=(1,), padding=(7,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=1, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
  )
  (ecgFc): Linear(in_features=2814, out_features=32, bias=True)
  (eegResiduals): Sequential(
    (0): ResidualBlock(
      (bn1): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(1, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (1): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (2): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (3): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (4): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 2, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (5): ResidualBlock(
      (bn1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
      (residualConv): Conv1d(2, 4, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    )
    (6): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (7): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (8): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (9): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 4, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
    (10): ResidualBlock(
      (bn1): BatchNorm1d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(4, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (downsample): MaxPool1d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    )
    (11): ResidualBlock(
      (bn1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu): ReLU()
      (dropout): Dropout(p=0.5, inplace=False)
      (conv1): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (bn2): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (conv2): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (residualConv): Conv1d(6, 6, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    )
  )
  (eegFc): Linear(in_features=720, out_features=32, bias=True)
  (fullLinear1): Linear(in_features=96, out_features=16, bias=True)
  (fullLinear2): Linear(in_features=16, out_features=1, bias=True)
  (sigmoid): Sigmoid()
)

Training Loop
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
[2024-05-04 17:03:29.947626] Completed epoch 0 with training loss 0.44523758, validation loss 0.41934308
Validation loss improved to 0.41934308. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:52<00:00,  1.51it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 17:04:29.403628] Completed epoch 1 with training loss 0.40731472, validation loss 0.42132238
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:05:29.385708] Completed epoch 2 with training loss 0.39953107, validation loss 0.43515643
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
[2024-05-04 17:06:29.349487] Completed epoch 3 with training loss 0.39603782, validation loss 0.42903224
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.07it/s]
[2024-05-04 17:07:30.139496] Completed epoch 4 with training loss 0.39472836, validation loss 0.41563830
Validation loss improved to 0.41563830. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.04it/s]
[2024-05-04 17:08:32.233279] Completed epoch 5 with training loss 0.39621815, validation loss 0.42691159
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.04it/s]
[2024-05-04 17:09:34.996830] Completed epoch 6 with training loss 0.39481205, validation loss 0.43427071
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
[2024-05-04 17:10:37.065860] Completed epoch 7 with training loss 0.39551696, validation loss 0.42255086
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.06it/s]
[2024-05-04 17:11:39.661722] Completed epoch 8 with training loss 0.39610973, validation loss 0.42534548
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
[2024-05-04 17:12:42.428912] Completed epoch 9 with training loss 0.39665514, validation loss 0.42655760
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.09it/s]
[2024-05-04 17:13:43.620633] Completed epoch 10 with training loss 0.39415452, validation loss 0.42093673
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
[2024-05-04 17:14:44.814615] Completed epoch 11 with training loss 0.39507329, validation loss 0.43804249
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:15:46.715298] Completed epoch 12 with training loss 0.39663669, validation loss 0.41533664
Validation loss improved to 0.41533664. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.02it/s]
[2024-05-04 17:16:49.207313] Completed epoch 13 with training loss 0.39495221, validation loss 0.43797359
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.93it/s]
[2024-05-04 17:17:52.394999] Completed epoch 14 with training loss 0.39601412, validation loss 0.41906431
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.06it/s]
[2024-05-04 17:18:55.078084] Completed epoch 15 with training loss 0.39503863, validation loss 0.42644000
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
[2024-05-04 17:19:56.789237] Completed epoch 16 with training loss 0.39602581, validation loss 0.42087582
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.45it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.03it/s]
[2024-05-04 17:20:59.067363] Completed epoch 17 with training loss 0.39431766, validation loss 0.43704537
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.06it/s]
[2024-05-04 17:22:01.603802] Completed epoch 18 with training loss 0.39533171, validation loss 0.42094174
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.00it/s]
[2024-05-04 17:23:03.489492] Completed epoch 19 with training loss 0.39483324, validation loss 0.41480899
Validation loss improved to 0.41480899. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
[2024-05-04 17:24:06.421663] Completed epoch 20 with training loss 0.39577204, validation loss 0.41109255
Validation loss improved to 0.41109255. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.44it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 17:25:08.149077] Completed epoch 21 with training loss 0.39674559, validation loss 0.40795988
Validation loss improved to 0.40795988. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 17:26:08.463469] Completed epoch 22 with training loss 0.39473608, validation loss 0.41061261
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
[2024-05-04 17:27:08.477896] Completed epoch 23 with training loss 0.39528424, validation loss 0.41068870
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 17:28:08.805781] Completed epoch 24 with training loss 0.39565200, validation loss 0.41700792
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 17:29:08.560955] Completed epoch 25 with training loss 0.39496222, validation loss 0.40647325
Validation loss improved to 0.40647325. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:30:08.905783] Completed epoch 26 with training loss 0.39297211, validation loss 0.43143067
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 17:31:08.809338] Completed epoch 27 with training loss 0.39499784, validation loss 0.40775493
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 17:32:08.869733] Completed epoch 28 with training loss 0.39340129, validation loss 0.41264945
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.50it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:33:08.705128] Completed epoch 29 with training loss 0.39510214, validation loss 0.40575728
Validation loss improved to 0.40575728. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 17:34:08.919150] Completed epoch 30 with training loss 0.39496127, validation loss 0.43435159
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 17:35:08.853696] Completed epoch 31 with training loss 0.39492732, validation loss 0.41220942
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
[2024-05-04 17:36:09.247452] Completed epoch 32 with training loss 0.39284906, validation loss 0.42021051
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:37:10.109077] Completed epoch 33 with training loss 0.39333123, validation loss 0.40423748
Validation loss improved to 0.40423748. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:38:10.686227] Completed epoch 34 with training loss 0.39541569, validation loss 0.40379304
Validation loss improved to 0.40379304. Model saved.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:39:11.106351] Completed epoch 35 with training loss 0.39330637, validation loss 0.40423241
No improvement in validation loss. 1 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:40:11.887150] Completed epoch 36 with training loss 0.39475733, validation loss 0.41595665
No improvement in validation loss. 2 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 17:41:12.086695] Completed epoch 37 with training loss 0.39262483, validation loss 0.41919500
No improvement in validation loss. 3 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 17:42:12.285755] Completed epoch 38 with training loss 0.39591652, validation loss 0.41071701
No improvement in validation loss. 4 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.46it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.83it/s]
[2024-05-04 17:43:14.667915] Completed epoch 39 with training loss 0.39639494, validation loss 0.40463069
No improvement in validation loss. 5 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:55<00:00,  1.43it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:44:16.767900] Completed epoch 40 with training loss 0.39302117, validation loss 0.40717521
No improvement in validation loss. 6 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.49it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.28it/s]
[2024-05-04 17:45:16.622141] Completed epoch 41 with training loss 0.39347261, validation loss 0.40877014
No improvement in validation loss. 7 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 17:46:16.950080] Completed epoch 42 with training loss 0.39395291, validation loss 0.42622808
No improvement in validation loss. 8 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 17:47:17.405873] Completed epoch 43 with training loss 0.39451116, validation loss 0.42390093
No improvement in validation loss. 9 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.26it/s]
[2024-05-04 17:48:17.915128] Completed epoch 44 with training loss 0.39448339, validation loss 0.40663078
No improvement in validation loss. 10 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
[2024-05-04 17:49:18.623512] Completed epoch 45 with training loss 0.39415359, validation loss 0.41325158
No improvement in validation loss. 11 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 17:50:19.430381] Completed epoch 46 with training loss 0.39526558, validation loss 0.40848449
No improvement in validation loss. 12 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:53<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.22it/s]
[2024-05-04 17:51:19.798863] Completed epoch 47 with training loss 0.39522320, validation loss 0.40627998
No improvement in validation loss. 13 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:52:20.303056] Completed epoch 48 with training loss 0.39365473, validation loss 0.42126116
No improvement in validation loss. 14 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
[2024-05-04 17:53:20.838845] Completed epoch 49 with training loss 0.39339662, validation loss 0.41097483
No improvement in validation loss. 15 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:54:21.265765] Completed epoch 50 with training loss 0.39436647, validation loss 0.41465908
No improvement in validation loss. 16 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
[2024-05-04 17:55:21.785136] Completed epoch 51 with training loss 0.39513737, validation loss 0.40759468
No improvement in validation loss. 17 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.47it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
[2024-05-04 17:56:22.380551] Completed epoch 52 with training loss 0.39449087, validation loss 0.41453305
No improvement in validation loss. 18 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.30it/s]
[2024-05-04 17:57:22.559521] Completed epoch 53 with training loss 0.39454114, validation loss 0.40553793
No improvement in validation loss. 19 epochs without improvement.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:54<00:00,  1.48it/s]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
[2024-05-04 17:58:22.898354] Completed epoch 54 with training loss 0.39345416, validation loss 0.41810021
No improvement in validation loss. 20 epochs without improvement.
Early stopping due to no improvement in validation loss.

Plot Validation and Loss Values from Training
  Epoch with best Validation Loss:   34, 0.4038
Generate AUROC/AUPRC for Each Intermediate Model

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0000.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:05<00:00,  2.43it/s]
Loss: 0.4199467386518206
AUROC: 0.6869563169669138
AUPRC: 0.32600918325094774
Sensitivity: 0.6070175438596491
Specificity: 0.6832214765100671
Threshold: 0.15
Accuracy:  0.6709859154929577

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4192192152142525
AUROC: 0.7251161042996589
AUPRC: 0.3503698799179891
Sensitivity: 0.6402877697841727
Specificity: 0.6913145539906104
Threshold: 0.15
Accuracy:  0.6829603455045151

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0001.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.4214002766779491
AUROC: 0.6967596844460143
AUPRC: 0.33746629826259467
Sensitivity: 0.6666666666666666
Specificity: 0.6328859060402685
Threshold: 0.12
Accuracy:  0.6383098591549295

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.420343941450119
AUROC: 0.7319381114826449
AUPRC: 0.35769278063660537
Sensitivity: 0.6906474820143885
Specificity: 0.6460093896713615
Threshold: 0.12
Accuracy:  0.6533176285826463

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0002.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.43528820148536135
AUROC: 0.6974449546685506
AUPRC: 0.33896411545455113
Sensitivity: 0.6210526315789474
Specificity: 0.6771812080536913
Threshold: 0.1
Accuracy:  0.668169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.22it/s]
Loss: 0.43382114060223104
AUROC: 0.7325153961337971
AUPRC: 0.36031622611603414
Sensitivity: 0.6522781774580336
Specificity: 0.6950704225352112
Threshold: 0.1
Accuracy:  0.688064389477817

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0003.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.27it/s]
Loss: 0.4284510037728718
AUROC: 0.697668668315083
AUPRC: 0.33882799406761815
Sensitivity: 0.6807017543859649
Specificity: 0.6060402684563758
Threshold: 0.1
Accuracy:  0.6180281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.26it/s]
Loss: 0.42762855291366575
AUROC: 0.7329934643834228
AUPRC: 0.36064651378428997
Sensitivity: 0.6438848920863309
Specificity: 0.7053990610328639
Threshold: 0.11
Accuracy:  0.6953278366705928

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0004.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.29it/s]
Loss: 0.4167990343911307
AUROC: 0.6978806075591664
AUPRC: 0.33748071206226793
Sensitivity: 0.624561403508772
Specificity: 0.6691275167785234
Threshold: 0.14
Accuracy:  0.6619718309859155

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.41411201283335686
AUROC: 0.7337113407865257
AUPRC: 0.3600526497830998
Sensitivity: 0.6630695443645084
Specificity: 0.6896713615023474
Threshold: 0.14
Accuracy:  0.6853160581075776

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0005.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.23it/s]
Loss: 0.4268587508371898
AUROC: 0.6976875073590014
AUPRC: 0.3404269841991809
Sensitivity: 0.6280701754385964
Specificity: 0.6718120805369128
Threshold: 0.11
Accuracy:  0.6647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.4269627183675766
AUROC: 0.7334159433016967
AUPRC: 0.36165169409268394
Sensitivity: 0.6558752997601919
Specificity: 0.6941314553990611
Threshold: 0.11
Accuracy:  0.6878680800942285

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0006.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.31it/s]
Loss: 0.4341382533311844
AUROC: 0.697275403273284
AUPRC: 0.34275341186901337
Sensitivity: 0.624561403508772
Specificity: 0.676510067114094
Threshold: 0.1
Accuracy:  0.668169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.27it/s]
Loss: 0.43424603827297686
AUROC: 0.732830777631416
AUPRC: 0.3610294496577257
Sensitivity: 0.6510791366906474
Specificity: 0.6978873239436619
Threshold: 0.1
Accuracy:  0.690223792697291

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0007.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.42239341352667126
AUROC: 0.6972389026256918
AUPRC: 0.34279510227046034
Sensitivity: 0.631578947368421
Specificity: 0.6657718120805369
Threshold: 0.12
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4217276368290186
AUROC: 0.7331105538104727
AUPRC: 0.3608068573488572
Sensitivity: 0.670263788968825
Specificity: 0.6821596244131456
Threshold: 0.12
Accuracy:  0.6802120141342756

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0008.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4248734691313335
AUROC: 0.6971411750853644
AUPRC: 0.3424948151353039
Sensitivity: 0.6596491228070176
Specificity: 0.6469798657718121
Threshold: 0.11
Accuracy:  0.6490140845070422

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.4244443755596876
AUROC: 0.7329102914851218
AUPRC: 0.35988326201500886
Sensitivity: 0.6858513189448441
Specificity: 0.6575117370892019
Threshold: 0.11
Accuracy:  0.6621515508441304

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0009.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.25it/s]
Loss: 0.425859945161002
AUROC: 0.6970587542682208
AUPRC: 0.34273120464214807
Sensitivity: 0.656140350877193
Specificity: 0.6550335570469799
Threshold: 0.11
Accuracy:  0.6552112676056338

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.4259470947086811
AUROC: 0.7326547212933878
AUPRC: 0.35947914291352884
Sensitivity: 0.6798561151079137
Specificity: 0.6673708920187793
Threshold: 0.11
Accuracy:  0.6694149980369062

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0010.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.4202768611056464
AUROC: 0.6971411750853644
AUPRC: 0.3415779284602517
Sensitivity: 0.6596491228070176
Specificity: 0.648993288590604
Threshold: 0.12
Accuracy:  0.6507042253521127

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.32it/s]
Loss: 0.41986620500683786
AUROC: 0.7326243230767499
AUPRC: 0.35907977571956123
Sensitivity: 0.684652278177458
Specificity: 0.6607981220657277
Threshold: 0.12
Accuracy:  0.6647035728307813

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0011.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.4378537982702255
AUROC: 0.696714941716708
AUPRC: 0.3437214542469652
Sensitivity: 0.6736842105263158
Specificity: 0.610738255033557
Threshold: 0.09
Accuracy:  0.6208450704225352

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.30it/s]
Loss: 0.4377595499157906
AUROC: 0.7317271534884768
AUPRC: 0.35878256255596475
Sensitivity: 0.7146282973621103
Specificity: 0.6284037558685446
Threshold: 0.09
Accuracy:  0.6425206124852768

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0012.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.41513556241989136
AUROC: 0.6971717885317319
AUPRC: 0.340547740097395
Sensitivity: 0.6631578947368421
Specificity: 0.6369127516778523
Threshold: 0.14
Accuracy:  0.6411267605633802

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.08it/s]
Loss: 0.41453595496714113
AUROC: 0.7323439839677554
AUPRC: 0.3589716374482767
Sensitivity: 0.6990407673860911
Specificity: 0.6490610328638498
Threshold: 0.14
Accuracy:  0.657243816254417

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0013.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.02it/s]
Loss: 0.43850261185850414
AUROC: 0.6968044271753209
AUPRC: 0.34346456465301456
Sensitivity: 0.6491228070175439
Specificity: 0.6597315436241611
Threshold: 0.09
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.15it/s]
Loss: 0.44010291770100596
AUROC: 0.7316338478512965
AUPRC: 0.35813082026324244
Sensitivity: 0.670263788968825
Specificity: 0.6727699530516432
Threshold: 0.09
Accuracy:  0.6723596387907342

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0014.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
Loss: 0.4192316489560263
AUROC: 0.6970422701047921
AUPRC: 0.3398119108274267
Sensitivity: 0.6175438596491228
Specificity: 0.6751677852348993
Threshold: 0.13
Accuracy:  0.6659154929577464

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.06it/s]
Loss: 0.4189671013504267
AUROC: 0.7317866833293929
AUPRC: 0.3586763680655345
Sensitivity: 0.6486810551558753
Specificity: 0.6981220657276995
Threshold: 0.13
Accuracy:  0.6900274833137024

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0015.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.42553230055740904
AUROC: 0.6968197338985047
AUPRC: 0.3425261094472597
Sensitivity: 0.6631578947368421
Specificity: 0.6308724832214765
Threshold: 0.11
Accuracy:  0.636056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:21<00:00,  1.82it/s]
Loss: 0.4253436427563429
AUROC: 0.731509158870087
AUPRC: 0.3581419559150777
Sensitivity: 0.6966426858513189
Specificity: 0.6455399061032864
Threshold: 0.11
Accuracy:  0.6539065567334118

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0016.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
Loss: 0.420556257878031
AUROC: 0.6973484045684681
AUPRC: 0.3389389873652435
Sensitivity: 0.6175438596491228
Specificity: 0.6718120805369128
Threshold: 0.12
Accuracy:  0.6630985915492957

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.10it/s]
Loss: 0.4210461966693401
AUROC: 0.7317205390617083
AUPRC: 0.3577176028805871
Sensitivity: 0.6546762589928058
Specificity: 0.6929577464788732
Threshold: 0.12
Accuracy:  0.6866902237926973

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0017.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
Loss: 0.4343519104378564
AUROC: 0.6965524549629105
AUPRC: 0.33965062461239404
Sensitivity: 0.6
Specificity: 0.6852348993288591
Threshold: 0.1
Accuracy:  0.6715492957746478

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.07it/s]
Loss: 0.4364953894168139
AUROC: 0.7308845881041646
AUPRC: 0.356035207611181
Sensitivity: 0.6330935251798561
Specificity: 0.7098591549295775
Threshold: 0.1
Accuracy:  0.6972909305064782

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0018.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.05it/s]
Loss: 0.42008612198489054
AUROC: 0.6974920522783469
AUPRC: 0.34240760121040487
Sensitivity: 0.624561403508772
Specificity: 0.6711409395973155
Threshold: 0.12
Accuracy:  0.663661971830986

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.4209299560636282
AUROC: 0.7315004334560521
AUPRC: 0.35723262799922273
Sensitivity: 0.6522781774580336
Specificity: 0.6913145539906104
Threshold: 0.12
Accuracy:  0.6849234393404005

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0019.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.4151157885789871
AUROC: 0.698052513834923
AUPRC: 0.3392034806656855
Sensitivity: 0.6175438596491228
Specificity: 0.676510067114094
Threshold: 0.13
Accuracy:  0.6670422535211268

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.03it/s]
Loss: 0.4153379175812006
AUROC: 0.7320111516420666
AUPRC: 0.35778098948766457
Sensitivity: 0.6426858513189448
Specificity: 0.7032863849765258
Threshold: 0.13
Accuracy:  0.6933647428347075

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0020.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.97it/s]
Loss: 0.4117732495069504
AUROC: 0.6980195455080654
AUPRC: 0.33781609340848084
Sensitivity: 0.6385964912280702
Specificity: 0.6610738255033557
Threshold: 0.14
Accuracy:  0.6574647887323943

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.12it/s]
Loss: 0.4104502011090517
AUROC: 0.7323721304646423
AUPRC: 0.3588950426311737
Sensitivity: 0.670263788968825
Specificity: 0.6755868544600939
Threshold: 0.14
Accuracy:  0.6747153513937966

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0021.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.02it/s]
Loss: 0.4080043137073517
AUROC: 0.6982950665253739
AUPRC: 0.34028127756425297
Sensitivity: 0.6350877192982456
Specificity: 0.6610738255033557
Threshold: 0.15
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.02it/s]
Loss: 0.4059729926288128
AUROC: 0.7330386395109265
AUPRC: 0.3606609242603545
Sensitivity: 0.670263788968825
Specificity: 0.6762910798122066
Threshold: 0.15
Accuracy:  0.6753042795445622

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0022.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.10it/s]
Loss: 0.4101602647985731
AUROC: 0.6982197103496998
AUPRC: 0.34025312936298807
Sensitivity: 0.6596491228070176
Specificity: 0.6530201342281879
Threshold: 0.14
Accuracy:  0.6540845070422535

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.08it/s]
Loss: 0.4099227014929056
AUROC: 0.7324864052420035
AUPRC: 0.3592987989935784
Sensitivity: 0.6858513189448441
Specificity: 0.6638497652582159
Threshold: 0.14
Accuracy:  0.6674519042010209

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0023.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.4119889331715448
AUROC: 0.6983939715059461
AUPRC: 0.33740857201701596
Sensitivity: 0.6596491228070176
Specificity: 0.6409395973154363
Threshold: 0.13
Accuracy:  0.643943661971831

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:20<00:00,  1.94it/s]
Loss: 0.4114056840538979
AUROC: 0.7325486090001238
AUPRC: 0.3591860004622517
Sensitivity: 0.6990407673860911
Specificity: 0.652112676056338
Threshold: 0.13
Accuracy:  0.6597958382410679

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0024.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.11it/s]
Loss: 0.4160560986825398
AUROC: 0.6980548687154128
AUPRC: 0.33888145131570935
Sensitivity: 0.6631578947368421
Specificity: 0.6295302013422819
Threshold: 0.11
Accuracy:  0.6349295774647887

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.07it/s]
Loss: 0.41634739227592943
AUROC: 0.73189575100483
AUPRC: 0.35770383866290795
Sensitivity: 0.7014388489208633
Specificity: 0.6455399061032864
Threshold: 0.11
Accuracy:  0.654691794267766

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0025.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.40720816595213755
AUROC: 0.6984245849523136
AUPRC: 0.33845767621349976
Sensitivity: 0.6596491228070176
Specificity: 0.6375838926174496
Threshold: 0.14
Accuracy:  0.6411267605633802

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:20<00:00,  1.96it/s]
Loss: 0.40629600137472155
AUROC: 0.7324776798279686
AUPRC: 0.35908321180262087
Sensitivity: 0.697841726618705
Specificity: 0.6502347417840375
Threshold: 0.14
Accuracy:  0.6580290537887711

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0026.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.93it/s]
Loss: 0.4311061480215618
AUROC: 0.6980760626398209
AUPRC: 0.33682698073057793
Sensitivity: 0.656140350877193
Specificity: 0.6543624161073825
Threshold: 0.09
Accuracy:  0.6546478873239436

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.04it/s]
Loss: 0.43270182646811006
AUROC: 0.7319676653043763
AUPRC: 0.3575855229129571
Sensitivity: 0.6750599520383693
Specificity: 0.6678403755868545
Threshold: 0.09
Accuracy:  0.6690223792697291

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0027.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.40913000064236776
AUROC: 0.6976557164723891
AUPRC: 0.34566557458950914
Sensitivity: 0.6175438596491228
Specificity: 0.6731543624161074
Threshold: 0.15
Accuracy:  0.6642253521126761

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.05it/s]
Loss: 0.4058456927537918
AUROC: 0.7324813388725638
AUPRC: 0.36099719320560003
Sensitivity: 0.6534772182254197
Specificity: 0.6941314553990611
Threshold: 0.15
Accuracy:  0.6874754613270514

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0028.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.91it/s]
Loss: 0.4122161865234375
AUROC: 0.6993547627457907
AUPRC: 0.3333631662543145
Sensitivity: 0.6631578947368421
Specificity: 0.6416107382550336
Threshold: 0.12
Accuracy:  0.6450704225352113

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:20<00:00,  1.96it/s]
Loss: 0.4114664576947689
AUROC: 0.7342044674119859
AUPRC: 0.3593471435768781
Sensitivity: 0.6954436450839329
Specificity: 0.6497652582159624
Threshold: 0.12
Accuracy:  0.657243816254417

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0029.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.08it/s]
Loss: 0.4064623564481735
AUROC: 0.698179677381373
AUPRC: 0.34250369101927114
Sensitivity: 0.6350877192982456
Specificity: 0.6651006711409396
Threshold: 0.17
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.02it/s]
Loss: 0.40219892635941507
AUROC: 0.7330862070906655
AUPRC: 0.36125305699959254
Sensitivity: 0.6690647482014388
Specificity: 0.6816901408450704
Threshold: 0.17
Accuracy:  0.6796230859835101

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0030.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.96it/s]
Loss: 0.43405558807509287
AUROC: 0.698751913340398
AUPRC: 0.33428293204041876
Sensitivity: 0.6596491228070176
Specificity: 0.6523489932885906
Threshold: 0.09
Accuracy:  0.6535211267605634

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:20<00:00,  1.99it/s]
Loss: 0.4349916107952595
AUROC: 0.7331762758807039
AUPRC: 0.35658962253261733
Sensitivity: 0.6762589928057554
Specificity: 0.6645539906103286
Threshold: 0.09
Accuracy:  0.6664703572830781

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0031.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.95it/s]
Loss: 0.41150245921952383
AUROC: 0.6994819262922407
AUPRC: 0.33864182430429846
Sensitivity: 0.6631578947368421
Specificity: 0.6308724832214765
Threshold: 0.12
Accuracy:  0.636056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.41118094250559806
AUROC: 0.7334947534929803
AUPRC: 0.35993701468279937
Sensitivity: 0.645083932853717
Specificity: 0.7068075117370892
Threshold: 0.13
Accuracy:  0.6967020023557126

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0032.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.03it/s]
Loss: 0.4204508534499577
AUROC: 0.6987095254915813
AUPRC: 0.33704696018388564
Sensitivity: 0.6771929824561403
Specificity: 0.6194630872483221
Threshold: 0.1
Accuracy:  0.6287323943661972

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.12it/s]
Loss: 0.4211242597550154
AUROC: 0.7322710845408181
AUPRC: 0.3568090487811631
Sensitivity: 0.6426858513189448
Specificity: 0.705868544600939
Threshold: 0.11
Accuracy:  0.6955241460541813

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0033.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.06it/s]
Loss: 0.4057990823473249
AUROC: 0.699592605675262
AUPRC: 0.3398704726863887
Sensitivity: 0.6526315789473685
Specificity: 0.6409395973154363
Threshold: 0.14
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.28it/s]
Loss: 0.40074076429009436
AUROC: 0.7345033832089258
AUPRC: 0.36216698917300966
Sensitivity: 0.6942446043165468
Specificity: 0.6490610328638498
Threshold: 0.14
Accuracy:  0.6564585787200629

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0034.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.40356786123343874
AUROC: 0.6998139644413045
AUPRC: 0.33870437080609284
Sensitivity: 0.656140350877193
Specificity: 0.6510067114093959
Threshold: 0.15
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.10it/s]
Loss: 0.3993221387267113
AUROC: 0.7344424460431654
AUPRC: 0.362408940255712
Sensitivity: 0.6906474820143885
Specificity: 0.6593896713615024
Threshold: 0.15
Accuracy:  0.6645072634471928

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0035.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
Loss: 0.40349545649119783
AUROC: 0.6994819262922407
AUPRC: 0.3373782229824426
Sensitivity: 0.6421052631578947
Specificity: 0.661744966442953
Threshold: 0.15
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.3967377655208111
AUROC: 0.7366405467175555
AUPRC: 0.3639719888385425
Sensitivity: 0.6798561151079137
Specificity: 0.6741784037558686
Threshold: 0.15
Accuracy:  0.6751079701609737

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0036.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.15it/s]
Loss: 0.41456747906548636
AUROC: 0.6984081007888849
AUPRC: 0.3379907655298725
Sensitivity: 0.656140350877193
Specificity: 0.6483221476510067
Threshold: 0.12
Accuracy:  0.6495774647887324

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.17it/s]
Loss: 0.4132086727768183
AUROC: 0.7318905439029059
AUPRC: 0.35636834616106555
Sensitivity: 0.6858513189448441
Specificity: 0.6570422535211268
Threshold: 0.12
Accuracy:  0.6617589320769532

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0037.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.41870054602622986
AUROC: 0.6992370187212998
AUPRC: 0.332275238579512
Sensitivity: 0.6807017543859649
Specificity: 0.6281879194630873
Threshold: 0.11
Accuracy:  0.6366197183098592

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.24it/s]
Loss: 0.4181537363678217
AUROC: 0.7345163305974938
AUPRC: 0.3613217860289409
Sensitivity: 0.6522781774580336
Specificity: 0.7
Threshold: 0.12
Accuracy:  0.6921868865331763

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0038.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.41063726586954935
AUROC: 0.6994042152360769
AUPRC: 0.3422481319891423
Sensitivity: 0.656140350877193
Specificity: 0.6510067114093959
Threshold: 0.12
Accuracy:  0.6518309859154929

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.06it/s]
Loss: 0.40884534642100334
AUROC: 0.7343139572848764
AUPRC: 0.36134753289448057
Sensitivity: 0.6930455635491607
Specificity: 0.6563380281690141
Threshold: 0.12
Accuracy:  0.6623478602277189

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0039.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.09it/s]
Loss: 0.405267066189221
AUROC: 0.6999458377487342
AUPRC: 0.33573092361220086
Sensitivity: 0.6526315789473685
Specificity: 0.6597315436241611
Threshold: 0.14
Accuracy:  0.6585915492957747

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.12it/s]
Loss: 0.3999785058200359
AUROC: 0.737406835095304
AUPRC: 0.3645236463607917
Sensitivity: 0.6822541966426858
Specificity: 0.6730046948356807
Threshold: 0.14
Accuracy:  0.6745190420102081

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0040.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.10it/s]
Loss: 0.40657074749469757
AUROC: 0.6987660426233367
AUPRC: 0.3380849110037342
Sensitivity: 0.6280701754385964
Specificity: 0.663758389261745
Threshold: 0.14
Accuracy:  0.6580281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.15it/s]
Loss: 0.4050603523850441
AUROC: 0.7336907938437982
AUPRC: 0.3607908053245576
Sensitivity: 0.6678657074340527
Specificity: 0.6828638497652583
Threshold: 0.14
Accuracy:  0.6804083235178642

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0041.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.4084265317235674
AUROC: 0.6993453432238314
AUPRC: 0.33236064527548703
Sensitivity: 0.631578947368421
Specificity: 0.6691275167785234
Threshold: 0.14
Accuracy:  0.6630985915492957

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.22it/s]
Loss: 0.4080931443721056
AUROC: 0.7369754900305108
AUPRC: 0.36149197383202114
Sensitivity: 0.6642685851318945
Specificity: 0.6882629107981221
Threshold: 0.14
Accuracy:  0.6843345111896348

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0042.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.17it/s]
Loss: 0.42735386746270315
AUROC: 0.6979818674202284
AUPRC: 0.3379217661304881
Sensitivity: 0.6280701754385964
Specificity: 0.6664429530201342
Threshold: 0.1
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.21it/s]
Loss: 0.42638014554977416
AUROC: 0.7326195381722791
AUPRC: 0.3601451190309899
Sensitivity: 0.658273381294964
Specificity: 0.686150234741784
Threshold: 0.1
Accuracy:  0.6815861798193954

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0043.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.04it/s]
Loss: 0.42393670763288227
AUROC: 0.6990239020369716
AUPRC: 0.3398198589812108
Sensitivity: 0.631578947368421
Specificity: 0.6657718120805369
Threshold: 0.1
Accuracy:  0.660281690140845

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.18it/s]
Loss: 0.42491584867238996
AUROC: 0.7337330135891288
AUPRC: 0.35671815320851946
Sensitivity: 0.6654676258992805
Specificity: 0.6866197183098591
Threshold: 0.1
Accuracy:  0.6831566548881036

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0044.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.18it/s]
Loss: 0.4064607790538243
AUROC: 0.6992817614506064
AUPRC: 0.3391741996489301
Sensitivity: 0.6526315789473685
Specificity: 0.6409395973154363
Threshold: 0.17
Accuracy:  0.6428169014084507

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.20it/s]
Loss: 0.40210493803024294
AUROC: 0.7364385956023913
AUPRC: 0.3639190338707685
Sensitivity: 0.6966426858513189
Specificity: 0.6528169014084507
Threshold: 0.17
Accuracy:  0.6599921476246564

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0045.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.10it/s]
Loss: 0.4132405753646578
AUROC: 0.6985022960084777
AUPRC: 0.33034599508704965
Sensitivity: 0.6666666666666666
Specificity: 0.6322147651006711
Threshold: 0.12
Accuracy:  0.6377464788732394

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.19it/s]
Loss: 0.41381835006177425
AUROC: 0.7356345909188142
AUPRC: 0.36042744231377494
Sensitivity: 0.7026378896882494
Specificity: 0.6394366197183099
Threshold: 0.12
Accuracy:  0.6497840596780526

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0046.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.21it/s]
Loss: 0.40858319827488493
AUROC: 0.6985964912280702
AUPRC: 0.33339680799156435
Sensitivity: 0.6631578947368421
Specificity: 0.6369127516778523
Threshold: 0.15
Accuracy:  0.6411267605633802

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:17<00:00,  2.29it/s]
Loss: 0.4071635276079178
AUROC: 0.734566853559406
AUPRC: 0.36220283439200096
Sensitivity: 0.6990407673860911
Specificity: 0.647887323943662
Threshold: 0.15
Accuracy:  0.6562622693364742

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0047.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.24it/s]
Loss: 0.4073611434016909
AUROC: 0.6985258448133757
AUPRC: 0.33171616994438924
Sensitivity: 0.656140350877193
Specificity: 0.6456375838926175
Threshold: 0.17
Accuracy:  0.6473239436619719

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.17it/s]
Loss: 0.4004960983991623
AUROC: 0.7366433613672442
AUPRC: 0.3639421296085973
Sensitivity: 0.6798561151079137
Specificity: 0.6645539906103286
Threshold: 0.17
Accuracy:  0.6670592854338437

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0048.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.20it/s]
Loss: 0.4199491058077131
AUROC: 0.6996785588131403
AUPRC: 0.3388700372511933
Sensitivity: 0.6280701754385964
Specificity: 0.6859060402684564
Threshold: 0.11
Accuracy:  0.6766197183098591

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.42025828547775745
AUROC: 0.7346815505342205
AUPRC: 0.3615941656633014
Sensitivity: 0.6414868105515588
Specificity: 0.7061032863849765
Threshold: 0.11
Accuracy:  0.6955241460541813

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0049.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.19it/s]
Loss: 0.41322736016341616
AUROC: 0.6989450135405628
AUPRC: 0.3340481131094881
Sensitivity: 0.631578947368421
Specificity: 0.6758389261744966
Threshold: 0.12
Accuracy:  0.6687323943661971

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.410320008918643
AUROC: 0.7344926875401088
AUPRC: 0.3605098826281311
Sensitivity: 0.6558752997601919
Specificity: 0.6946009389671362
Threshold: 0.12
Accuracy:  0.6882606988614056

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0050.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:07<00:00,  1.98it/s]
Loss: 0.41445990971156527
AUROC: 0.699375956670199
AUPRC: 0.34650913921349624
Sensitivity: 0.656140350877193
Specificity: 0.6389261744966444
Threshold: 0.11
Accuracy:  0.6416901408450705

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.06it/s]
Loss: 0.413426436856389
AUROC: 0.7341051102779748
AUPRC: 0.36101408759851356
Sensitivity: 0.6906474820143885
Specificity: 0.6610328638497652
Threshold: 0.11
Accuracy:  0.6658814291323125

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0051.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.16it/s]
Loss: 0.40671741323811667
AUROC: 0.6986059107500294
AUPRC: 0.3365021012754904
Sensitivity: 0.6210526315789474
Specificity: 0.6731543624161074
Threshold: 0.17
Accuracy:  0.6647887323943662

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.03it/s]
Loss: 0.40343266949057577
AUROC: 0.7352776933382872
AUPRC: 0.36338610839570673
Sensitivity: 0.6486810551558753
Specificity: 0.6948356807511737
Threshold: 0.17
Accuracy:  0.6872791519434629

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0052.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.14it/s]
Loss: 0.41485537375722614
AUROC: 0.6993029553750147
AUPRC: 0.33858577828884634
Sensitivity: 0.631578947368421
Specificity: 0.6644295302013423
Threshold: 0.12
Accuracy:  0.6591549295774648

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.05it/s]
Loss: 0.4138030920177698
AUROC: 0.7370658402855181
AUPRC: 0.3628426787274585
Sensitivity: 0.6798561151079137
Specificity: 0.6769953051643193
Threshold: 0.12
Accuracy:  0.6774636827640361

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0053.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.04it/s]
Loss: 0.4056778975895473
AUROC: 0.6985964912280702
AUPRC: 0.3368186206729994
Sensitivity: 0.6350877192982456
Specificity: 0.6610738255033557
Threshold: 0.17
Accuracy:  0.6569014084507042

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.07it/s]
Loss: 0.39611935913562774
AUROC: 0.7373761554136973
AUPRC: 0.36280809119633567
Sensitivity: 0.6630695443645084
Specificity: 0.6800469483568075
Threshold: 0.17
Accuracy:  0.6772673733804476

Intermediate Model:
  ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0054.model
AUROC/AUPRC on Validation Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14/14 [00:06<00:00,  2.12it/s]
Loss: 0.4181559000696455
AUROC: 0.6980996114447191
AUPRC: 0.3423118359779546
Sensitivity: 0.6771929824561403
Specificity: 0.6181208053691275
Threshold: 0.11
Accuracy:  0.6276056338028169

AUROC/AUPRC on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:19<00:00,  2.09it/s]
Loss: 0.4183577161282301
AUROC: 0.7325376318663379
AUPRC: 0.3582945796535063
Sensitivity: 0.7026378896882494
Specificity: 0.6366197183098592
Threshold: 0.11
Accuracy:  0.6474283470749902


Plot AUROC/AUPRC for Each Intermediate Model
  Epoch with best Validation Loss:      34, 0.4038
  Epoch with best model Test AUROC:     39, 0.7374
  Epoch with best model Test Accuracy:  17, 0.6973

AUROC/AUPRC Plots - Best Model Based on Validation Loss
  Epoch with best Validation Loss:   34, 0.4038
  Best Model Based on Validation Loss:
    ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0034.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.16it/s]
Loss: 0.3993221387267113
AUROC: 0.7344424460431654
AUPRC: 0.362408940255712
Sensitivity: 0.6906474820143885
Specificity: 0.6593896713615024
Threshold: 0.15
Accuracy:  0.6645072634471928
<Figure size 640x480 with 0 Axes>
best_model_val_test_auroc: 0.7344424460431654
best_model_val_test_auprc: 0.362408940255712

AUROC/AUPRC Plots - Best Model Based on Model AUROC
  Epoch with best model Test AUROC:  39, 0.7374
  Best Model Based on Model AUROC:
    ./vitaldb_cache/models/ABP_EEG_ECG_12_RESIDUAL_BLOCKS_128_BATCH_SIZE_1e-04_LEARNING_RATE_1e-01_WEIGHT_DECAY_015_MINS__ALL_MAX_CASES_10e6e48b_0039.model

Generate Stats Based on Test Data
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40/40 [00:18<00:00,  2.13it/s]
Loss: 0.3999785058200359
AUROC: 0.737406835095304
AUPRC: 0.3645236463607917
Sensitivity: 0.6822541966426858
Specificity: 0.6730046948356807
Threshold: 0.14
Accuracy:  0.6745190420102081
best_model_auroc_test_auroc: 0.737406835095304
best_model_auroc_test_auprc: 0.3645236463607917

Total Processing Time: 4840.2950 sec

ABP and Batch Size Splits¶

In [107]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=16,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
In [108]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=32,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
In [109]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=64,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
In [110]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )

ABP and Learning Rate¶

In [111]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-2,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
In [112]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-3,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )
In [113]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=128,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=False,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )

Balance Labels¶

In [114]:
RUN_ME = False

if MULTI_RUN and RUN_ME:
    run_experiment(
        experimentNamePrefix=None, 
        useAbp=True, 
        useEeg=False, 
        useEcg=False,
        nResiduals=12, 
        skip_connection=False,
        batch_size=64,
        learning_rate=1e-4,
        weight_decay=0.0,
        balance_labels=True,
        #pos_weight=2.0,
        pos_weight=None,
        max_epochs=200,
        patience=20,
        device=device
    )

Results (Planned results for Draft submission)¶

When we complete our experiments, we will build comparison tables that compare a set of measures for each experiment performed. The full set of experiments and measures are listed below.

Results from Final Rubrik¶

  • Table of results (no need to include additional experiments, but main reproducibility result should be included)
  • All claims should be supported by experiment results
  • Discuss with respect to the hypothesis and results from the original paper
  • Experiments beyond the original paper
    • Each experiment should include results and a discussion
  • Ablation Study.

Experiments¶

  • ABP only
  • ECG only
  • EEG only
  • ABP + ECG
  • ABP + EEG
  • ECG + EEG
  • ABP + ECG + EEG

Note: each experiment will be repeated with the following time-to-IOH-event durations:

  • 3 minutes
  • 5 minutes
  • 10 minutes
  • 15 minutes

Note: the above list of experiments will be performed if there is sufficient time and gpu capability to complete that before the submission deadline. Should we experience any constraints on this front, we will reduce our experimental coverage to the following 4 core experiments that are necessary to measure the hypotheses included at the head of this report:

  • ABP only @ 3 minutes
  • ABP + ECG @ 3 minutes
  • ABP + EEG @ 3 minutes
  • ABP + ECG + EEG @ 3 minutes

For additional details please review the "Planned Actions" in the Discussion section of this report.

Measures¶

  • AUROC
  • AUPRC
  • Sensitivity
  • Specificity
  • Threshold
  • Loss Shrinkage

[ TODO for final report - collect data for all measures listed above. ]

[ TODO for final report - generate ROC and PRC plots for each experiment ]

We are collecting a broad set of measures across each experiment in order to perform a comprehensive comparison of all measures listed across all comparable experiments executed in the original paper. However, our key experimental results will be focused on a subset of these results that address the main experiments defined at the beginning of this notebook.

The key experimental result measures will be as follows:

  • For 3 minutes ahead of the predicted IOH event:
    • compare AUROC and AUPRC for ABP only vs ABP+ECG
    • compare AUROC and AUPRC for ABP only vs ABP+EEG
    • compare AUROC and AUPRC for ABP only vs ABP+ECG+EEG

Model comparison¶

The following table is Table 3 from the original paper which presents the measured values for each signal combination across each of the four temporal predictive categories:

Area under the Receiver-operating Characteristic Curve, Area under the Precision-Recall Curve, Sensitivity, and Specificity of the model in predicting intraoperative hypotension

We have not yet completed the execution of the experiments necessary to determine our reproduced model performance in order determine whether our results are accurately representing those of the original paper. These details are expected to be included in the final report.

As of the draft submission, the reported evaluation measures of our model are too good to be true (all measures are 1.0). We suspect that there is data leakage in the dataset splitting process and will address this in time for the final report.

Discussion¶

Discussion (10) FROM FINAL RUBRIK¶

  • Implications of the experimental results, whether the original paper was reproducible, and if it wasn’t, what factors made it irreproducible
  • “What was easy”
  • “What was difficult”
  • Recommendations to the original authors or others who work in this area for improving reproducibility
  • (specific to our group) "I have communicated with Maciej during OH. The draft looks good and I would expect some explanations/analysis on the final report on why you get 1.0 as AUROC."
    • discuss our bug where we were believing we were sampling dozens of different patient samples but were just training the model on the same segments extracted from the same patient sample over and over. so we were massively overfitting our training data for one patient's data, then unwittingly using the same patient data for validation and testing, thus getting perfect classification during inference.

Feasibility of reproduction¶

Our assessment is that this paper will be reproducible. The outstanding risk is that each experiment can take up to 7 hours to run on hardware within the team (i.e., 7h to run ~70 epochs on a desktop with AMD Ryzen 7 3800X 8-core CPU w/ RTX 2070 SUPER GPU and 32GB RAM). There are a total of 28 experiments (7 different combinations of signal inputs, 4 different time horizons for each combination). Should our team find it not possible to complete the necessary experiments across all of the experiments represented in Table 3 of our selected paper, we will reduce the number of experiments to focus solely on the ones directly related to our hypotheses described in the beginning of this notebook (i.e., reduce the number of combinations of interest to 4: ABP alone, ABP+EEG, ABP+ECG, ABP+ECG+EEG). This will result in a new total of 16 experiments to run.

Planned ablations¶

Our proposal included a collection of potential ablations to be investigated:

  • Remove ResNet skip connection
  • Reduce # of residual blocks from 12 to 6
  • Reduce # of residual blocks from 12 to 1
  • Eliminate dropout from residual block
  • Max pooling configuration
    • smaller size/stride
    • eliminate max pooling

Given the amount of time required to conduct each experiment, our team intends to choose only a small number of ablations from this set. Further, we only intend to perform ablation analysis against the best performing signal combination and time horizon from the reproduction experiments. In order words, we intend to perform ablation analysis against the following training combinations, and only against the models trained with data measured 3 minutes prior to an IOH event:

  • ABP alone
  • ABP + ECG
  • ABP + EEG
  • ABP + ECG + EEG

Time and GPU resource permitting, we will complete a broader range of experiments. For additional details, please see the section below titled "Plans for next phase".

Nature of reproduced results¶

Our team intends to address the manner in which the experimental results align with the published results in the paper in the final submission of this report. The amount of time required to complete model training and result analysis during the preparation of the Draft notebook was not sufficient to complete a large number of experiments.

What was easy? What was difficult?¶

The difficult aspect of the preparation of this draft involved the data preprocessing.

  • First, the source data is unlabelled, so our team was responsible for implementing analysis methods for identifying positive (IOH event occurred) and negative (IOH event did not occur) by running a lookahead analysis of our input training set.
  • Second, the volume of raw data is in excess of 90GB. A non-trivial amount of compute was required to minify the input data to only include the data tracks of interest to our experiments (i.e., ABP, ECG, and EEG tracks).
  • Third, our team found it difficult to trace back to the definition of the jSQI signal quality index referenced in the paper. Multiple references through multiple papers needed to be traversed to understand which variant of the quality index
    • The only available source code related to the signal quality index as referenced by our paper in [5]. Source code was not directly linked from the paper, but the GitHub repository for the corresponding author for reference [5] did result in the identification of MATLAB source code for the signal quality index as described in the referenced paper. That code is available here: https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox/tree/master/Tools/BP_Tools
    • Our team had insufficient time to port this signal quality index to Python for use in our investigation, or to setup a MATLAB environment in which to assess our source data using the above MATLAB functions, but we expect to complete this as part of our final report.

Suggestions to paper author¶

The most notable suggestion would be to correct the hyperparameters published in Supplemental Table 1. Specifically, the output size for residual blocks 11 and 12 for the ECG and ABP data sets was 496x6. This is a typo, and should read 469x6. This typo became apparent when operating the size down operation within Residual Block 11 and recognizing the tensor dimensions were misaligned.

Additionally, more explicit references to the signal quality index assessment tools should be added. Our team could not find a reference to the MATLAB source code as described in reference [3], and had to manually discover the GitHub profile for the lab of the corresponding author of reference [3] in order to find MATLAB source that corresponded to the metrics described therein.

Plans for next phase¶

Our team plans to accomplish the following goals in service of preparing the Final Report:

  • Implement the jSQI filter to remove any training data with aberrent signal quality per the threshold defined in our original paper.
  • Execute the following experiments:
    • Measure predictive quality of the model trained solely with ABP data at 3 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+ECG data at 3 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+EEG data at 3 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+ECG+EEG data at 3 minutes prior to IOH events.
  • Gather our measures for these experiments and perform a comparison against the published results from our selected paper and determine whether or not we are succesfully reproducing the results outlined in the paper.
  • Ablation analysis:
    • Execute the following ablation experiments:
      • Repeat the four experiments described above while reducing the numnber of residual blocks in the model from 12 to 6.
  • Time- and/or GPU-resource permitting, we will complete the remaining 24 experiments as described in the paper:
    • Measure predictive quality of the model trained solely with ABP data at 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+ECG data at 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+EEG data at 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ABP+ECG+EEG data at 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained solely with ECG data at 3, 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained solely with EEG data at 3, 5, 10, and 15 minutes prior to IOH events.
    • Measure predictive quality of the model trained with ECG+EEG data at 3, 5, 10, and 15 minutes prior to IOH events.
    • Additional ablation experiments:
      • For the four core experiments (ABP, ABP+ECG, ABP+EEG, ABP+ECG+EEG each trained on event data occurring 3 minutes prior to IOH events), perform the following ablations:
        • Repeat experiment while eliminating dropout from every residual block
        • Repeat experiment while removing the skip connection from every residual block
        • Repeat the four experiments described above while reducing the numnber of residual blocks in the model from 12 to 1.

References¶

  1. Jo Y-Y, Jang J-H, Kwon J-m, Lee H-C, Jung C-W, Byun S, et al. “Predicting intraoperative hypotension using deep learning with waveforms of arterial blood pressure, electroencephalogram, and electrocardiogram: Retrospective study.” PLoS ONE, (2022) 17(8): e0272055 https://doi.org/10.1371/journal.pone.0272055
  2. Hatib, Feras, Zhongping J, Buddi S, Lee C, Settels J, Sibert K, Rhinehart J, Cannesson M “Machine-learning Algorithm to Predict Hypotension Based on High-fidelity Arterial Pressure Waveform Analysis” Anesthesiology (2018) 129:4 https://doi.org/10.1097/ALN.0000000000002300
  3. Bao, X., Kumar, S.S., Shah, N.J. et al. "AcumenTM hypotension prediction index guidance for prevention and treatment of hypotension in noncardiac surgery: a prospective, single-arm, multicenter trial." Perioperative Medicine (2024) 13:13 https://doi.org/10.1186/s13741-024-00369-9
  4. Lee, HC., Park, Y., Yoon, S.B. et al. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Sci Data 9, 279 (2022). https://doi.org/10.1038/s41597-022-01411-5
  5. Li Q., Mark R.G. & Clifford G.D. "Artificial arterial blood pressure artifact models and an evaluation of a robust blood pressure and heart rate estimator." BioMed Eng OnLine. (2009) 8:13. pmid:19586547 https://doi.org/10.1186/1475-925X-8-13
  6. Park H-J, "VitalDB Python Example Notebooks" GitHub Repository https://github.com/vitaldb/examples/blob/master/hypotension_art.ipynb

Public GitHub Repo (5)¶

  • Publish your code in a public repository on GitHub and attach the URL in the notebook.
  • Make sure your code is documented properly.
    • A README.md file describing the exact steps to run your code is required.
    • Check “ML Code Completeness Checklist” (https://github.com/paperswithcode/releasing-research-code)
    • Check “Best Practices for Reproducibility” (https://www.cs.mcgill.ca/~ksinha4/practices_for_reproducibility/)

Video Presentation (Requirements from Rubrik)¶

Walkthrough of the notebook, no need to make slides. We expect a well-timed, well-presented presentation. You should clearly explain what the original paper is about (what the general problem is, what the specific approach taken was, and what the results claimed were) and what you encountered when you attempted to reproduce the results. You should use the time given to you and not too much (or too little).

  • <= 4 mins
  • Explain the general problem clearly
  • Explain the specific approach taken in the paper clearly
  • Explain reproduction attempts clearly
In [115]:
print(f'All done!')
All done!